⑴ 如何監控linux伺服器上的數據
linux伺服器性能監測是很重要的工作,伺服器運行應該提供最有效的系統性能。當伺服器系統性能突然低於平均應有的情況,問題可能來自在執行的進程、內存的使用率、磁碟的性能、網路流量和cpu
的壓力。在預算短缺的今天,理解如何優化系統性能比以往任何時候都重要。
要實現它的前提是,你必須充分了解自己的計算機和網路,從而找到真正的瓶頸所在。本文提供一些基礎的工具來辨別和處理一些性能問題。使用的linux
發行版本是red
hat
enterprise
linux
4,工作過程是:首先查看整個系統的狀態,然後是檢查特定的子系統。
linux伺服器進行性能監控有幾種方法,每種方法都各有其優缺點。
使用snmp等標准工具
標准及非標准工具能執行一個或多個收集、合並及傳輸階段,如rstatd或snmp工具,然而標準的rstat後台程序提供的信息是有限的,速度慢而且效率低。
內核模塊
幾個系統監控工程利用內核模塊來存取監控數據。一般情況下,這是很有效的收集系統數據的方法。然而這種方法存在的問題是,當主內核源內有其它改變時,必須保持代碼一致性。一個內核模塊可能與用戶想使用的其它內核模塊相沖突。此外,在使用監控系統之前,用戶必須獲得或申請模塊。
/proc虛擬文件系統
/proc虛擬文件系統是一個較快的、高效率執行系統監控的方法。使用/proc的主要缺點是必須保持代碼分析與/proc
文件格式改變的同步。事實表明,linux內核的改變比/proc
文件格式的改變要更頻繁,所以,用/proc虛擬文件系統比用內核模塊存在的問題要少。本文介紹的方法即基於/proc虛擬文件系統。
一、
/proc文件系統特點
linux
系統向管理員提供了非常好的方法,使他們可以在系統運行時更改內核,而不需要重新引導內核系統。這是通過
/proc
虛擬文件系統實現的。/proc
文件虛擬系統是一種內核和內核模塊用來向進程
(process)
發送信息的機制
(所以叫做
/proc)。這個偽文件系統讓你可以和內核內部數據結構進行交互,獲取
有關進程的有用信息,在運行中
(on
the
fly)
改變設置
(通過改變內核參數)。
與其他文件系統不同,/proc
存在於內存之中而不是硬碟上。不用重新啟動而去看
cmos
,就可以知道系統信息。這就是
/proc
的妙處之一。
小提示:
每個linux系統根據軟硬體不同/proc
虛擬文件系統的內容也有些差異。/proc
虛擬文件系統有三個很重要的目錄:net,scsi和sys。sys目錄是可寫的,可以通過它來訪問或修改內核的參數,而net和scsi則依賴於內核配置。
⑵ java如何在linux下監聽某個目錄下是否有文件改變
JDK 7 的nio2 WatchService可以監聽文件系統。
Oracle官方教程鏈接 http://docs.oracle.com/javase/tutorial/essential/io/notification.html
樣例代碼:
importstaticjava.nio.file.StandardWatchEventKinds.*;
Pathpath=Paths.get("/home");
WatchServicewatchService=FileSystems.getDefault().newWatchService();
WatchKeywatchKey=path.register(watchService,ENTRY_CREATE,ENTRY_DELETE,ENTRY_MODIFY);
/*
privatebooleannotDone=true;
while(notDone){
try{
WatchKeywatchKey=watchService.poll(60,TimeUnit.SECONDS);
List<WatchEvent.Kind<?>>events=watchKey.pollEvents();
for(WatchEventevent:events){
//.register
PathwatchedPath=(Path)watchKey.watchable();
//returnstheeventtype
=event.kind();
//returnsthecontextoftheevent
Pathtarget=(Path)event.context();
}
if(!watchKey.reset()){
...handlesituationnolongervalid
}
}catch(InterruptedExceptione){
Thread.currentThread().interrupt();
}
}
*/
⑶ 如何監測Linux進程的實時IO讀寫情況
iotop怎麼用
1
本經驗咗嚛以centos為例演示,首先先安裝一下iotop程序。
可以通過yum install intop 安裝
如果伺服器不能上網,請參考下面經驗解決
Linux不能上網ping:unknown host問題怎麼解決
http://jingyan..com/article/4d58d54137d2a19dd5e9c050.html
2
伺服器能上網,通過yum之後找到 iotop相關的程序,選擇Y 進行確認安裝
3
安裝好之後,我們可以通過rpm -qa |grep iotop 確認是否已經安裝好, 直接通過io tab補全查看有這個命令
4
怎麼檢測centos進程負載
直接輸入iotop 查看當前系統進程的磁碟讀寫情況,注意這個是一個動態的顯示結果。
5
當然也可以通過輸入 iotop -o 直接查看輸出比較高的磁碟讀寫程序。
注意觀察發現異常的進程,記錄下程序的路徑(最後面就是腳本或文件的執行路徑)
6
至於iotop的使用方法還有很多命令,具體可以通過 iotop -- help來獲取。 一般用 - o這個參數就行
END
其他相關檢測診斷
除了上述的磁碟讀寫的資源情況來看,還需要結合cpu,內存佔用資源查看異常進程。
可以通過top 來檢測(如果顯示都是紅色的話,那就要注意了。硬體的資源佔用負載比較高要考慮擴容內存了)
對於異常進程的查看,一般都是要確認有沒有系統中毒或者惡意數據外發。可以通過netstat來查看伺服器網路連接情況。
Netstat -ntlp 根據網路連接情況,最後面一欄是顯示的路徑\進程的位置。對於發現異常進程處理很有幫助
步驟閱讀
3
對於centos系統的安全性查看和檢查,以上咗嚛介紹的只是很小的一部分。對於管理員平時的維護,管理員密碼要定期修改採用強密碼,同時對於不必要的埠不要對外開放,注意平時管理linux伺服器最好不要直接用root許可權來操作。
⑷ 13、linux上怎麼動態監控一個文件的內容變化
用途說明
tail命令可以輸出文件的尾部內容,默認情況下它顯示文件的最後十行。它常用來動態監視文件的尾部內容的增長情況,比如用來監視日誌文件的變化。與tail命令對應的是head命令,用來顯示文件頭部內容。
常用參數
格式:tail file
輸出指定文件file的尾部內容,默認輸出最後十行內容(outputthe last part of files。Print the last 10 lines of each FILE tostandard output. )
格式:tail file1 file2...
指定多個文件時,會顯示每個文件的文件名稱,再顯示該文件的尾部內容(Withmore than one FILE, precede each with a header giving the file name.)
格式:tail
格式:tail -
不指定文件時,表明從標准輸入讀取內容,這通常用在管道線後面,把前一個命令的輸出作為tail的輸入內容(Withno FILE, or when FILE is -, read standard input.)
格式:tail -n file
格式:tail -n n file
格式:tail --lines=n
顯示文件最後n 行,比如tail -20 file就是顯示文件最後10行,這個參數可以配合其他參數與使用。注意上面三種格式的斜體n 是實際要顯示的行數的數值。
注意:tail-n可以顯示最後n行的文本內容。那麼有沒有一種方式顯示從n行開始的文本內容,答案是肯定的。
tail -n +4file表示顯示文件file從第4行開始的內容。從1開始計數。
格式:tail -f file
動態跟蹤文件file的增長情況(outputappended data as the filegrows),tail會每隔一秒去檢查一下文件是否增加新的內容,如果增加就追加在原來的輸出後面顯示。但這種情況,必須保證在執行tail命令時,文件已經存在。
如果想終止tail-f的輸出,按Ctrl+C中斷tail程序即可。如果按Ctrl+C不能中斷輸出,那麼可以在別的終端上執行killall tail強行終止。
注意:採用tail-f來監控文件變化情況時,在某些情況會不太靈。比如在Java應用程序中採用log4j日誌時,每隔1個小時生成一個新的日誌文件,當前的日誌輸出在 LOG4J.LOG中,當一個小時過去後,log4j會將LOG4J.LOG改名成LOG4J.yyyy-mm-dd-HH的形式。那麼這個時候tail -f就不能動態輸出新的日誌內容了。tail命令本身提供了很多參數,似乎都不能完美的解決這個問題。最後只好編寫了一個腳本ftail.sh來跟蹤日 志,詳見《Linux下實時跟蹤log4j日誌文件的bash腳本 - 增強了tail -f的功能 》。剛才我仔細查看了tail的手冊頁,發現tail -F就能夠做到跟蹤這種類型的日誌。轉念一想,這種需求應該早就被Linux世界的人給滿足了的。
格式:tail -F file
格式:tail--follow=name --retry file
功能與tail -ffile相同,也是動態跟蹤文件的變化,不同的是執行此命令時文件可以不存在。
以上處理都是針對文本文件的,下面是針對二進制文件的情形。
格式:tail -c n file
取文件file的最後n個位元組。
格式:tail -c +n file
取文件file的第n個位元組後的內容。從1開始計數。
使用示例
示例一 輸出文件尾部
先使用seq命令輸出20個數字保存到1.txt,然後嘗試使用tail命令。
[root@new55 ~]# seq 20 >1.txt
[root@new55 ~]# cat 1.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@new55 ~]# tail 1.txt
11
12
13
14
15
16
17
18
19
20
[root@new55 ~]# tail -3 1.txt
18
19
20
[root@new55 ~]# tail -n 3 1.txt
18
19
20
[root@new55 ~]# tail --lines=3 1.txt
18
19
20
[root@new55 ~]# tail -n +14 1.txt
14
15
16
17
18
19
20
[root@new55 ~]#
示例二 動態跟蹤tomcat輸出
動態跟蹤tomcat輸出。
[root@web logs]# tail -f catalina.out
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
atorg.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
2010-12-0313:23:02,236 [http-80-15] DEBUG mhr.roi.MhrManager -MhrGetJobReq={seq=991,job_id='86130469-0006'}
2010-12-0313:23:02,301 [http-80-15] DEBUG mhr.roi.MhrManager -MhrGetJobRsp={seq=991,result=0(成功),,info={job_id='86130469-0006',employer_id=86130469,employer_name=無錫富士時裝有限公司,,,job_title='|570309|',job_title0='文員',job_type=f(全 職),issue_time='2010-11-0300:00:00.0',work_address='1902',work_address0=無錫 市,desired_count='1',,,,,,job_desc=大專,1年以上5s管理工作經驗,電腦操作熟練。,required_experience=1(一年以上),,,,required_degree=15(大專),,,,,,,valid_days=30,access_count=12,expire_time='2010-12-0300:00:00.0',job_status=1(過期),,,,,,contact_name=王小 姐,contact_number=0510-85550088,remarks='★此職位是從後台導入的
',enter_time='2010-11-0309:45:11.0',change_time=2010-12-0302:18:05.0,,job_seq=123201,,required_min_age=22,,,accommodations=面議,serve_principal=wjw12580,job_summary=大專,1年以上5s管理工作經驗,電腦操作熟練,,}}
2010-12-0313:23:02,302 [http-80-15] DEBUG mhr.roi.MhrManager -MhrGetEmployerReq={seq=0,employer_id='86130469'}
2010-12-0313:23:02,304 [http-80-15] DEBUG mhr.roi.MhrManager -MhrGetEmployerRsp={seq=0,result=0(成功),,info= {employer_id='86130469',employer_name=無錫富士時裝有限公司,employer_region=1902,employer_address=無錫市濱湖鎮山水城科技園8號,,employer_desc=無錫 富士時裝(集團)有限公司成立於1992年,是中日韓合資企業。主要生產高檔針織時裝,產品全部外銷,連續多年榮獲「中國行業500強」、「全國工業重點 行業效益十佳企業」、「無錫市百佳企業」等稱號。公司總部位於江蘇省無錫市濱湖鎮山水城科技園,全新的廠房設施,佔地面積30畝。公司分別在蘇州、泰興、 鹽城、徐州設有分廠,集團公司現有職工1500多人,年銷售額近3億元。,,,,,,open_mode=5(系統自動操 作),open_time='2010-11-0309:45:10.0',,,,,contact_name=王小 姐,contact_number=0510-85550088,,,,,employer_status=1(已經開通),,,login_password=871386,,agency=false,balance=100.0000,,,,,serve_principal=wjw12580,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,remarks='此帳號由「12580zgz-鹽城維克多網路傳媒有限公司」導入',enter_time='2010-11-03 09:45:10.0',}}
Ctrl+C
[root@web logs]#
示例三 動態跟蹤log4j日誌
經過我的試驗,發現tail -F功能的強大,它等同於--follow=name--retry。如果你跟蹤的文件被移動或者改名後, 你還想繼續tail它, 你可以使用這個選項。
tail手冊頁中關於--retry的說明:keep trying to open a file even if itis inaccessible when tail starts or if it becomes inaccessible later; useful when following by name, i.e., with --follow=name。 tail命令開始執行時文件不存在或者執行過程中文件不能訪問,會不斷重試。
關於--follow的說明:-f, --follow[={name|descriptor}]output appended data as the file grows; -f, --follow, and --follow=descriptorare equivalent 。--follow=descriptor表明跟蹤的是文件描述符, --follow=name表明跟蹤的是文件名稱。 如果文件名稱改掉之後,還想繼續跟蹤原文件名稱對應的尾部內容,就得使用-F選項而不是-f選項了。
[root@webimx_server]# tail -F log/IMX.LOG
14:13:28.892 INFO ImxConnection[6] imx.server.ImxConnection - RXIMX_ACTIVE_TEST{seq=3460,client_id=1291343201649042,presence_status=1(presence_status_online),}
14:13:28.892 DEBUGImxConnection[6] org.logicalcobwebs.proxool.ImxDB - 006417 (01/02/00) -Connection #9 served
14:13:28.892 INFO ImxConnection[6] imx.dbo.ImxOnlineInfoRow - EXEC SQL UPDATEimx_online_info SET last_active_time = '2010-12-03 14:13:28.0' WHERE account ='zhy'
14:13:28.894 DEBUGImxConnection[6] org.logicalcobwebs.proxool.ImxDB - UPDATE imx_online_info SETlast_active_time = '2010-12-03 14:13:28.0' WHERE account = 'zhy'; (1milliseconds)
14:13:28.894 DEBUGImxConnection[6] org.logicalcobwebs.proxool.ImxDB - 006417 (00/02/00) -Connection #9 returned (now AVAILABLE)
14:13:29.625 INFO ImxConnection[6] imx.server.ImxConnection - RXIMX_ACTIVE_TEST{seq=3461,client_id=1291343201649042,presence_status=1(presence_status_online),}
14:13:29.626 DEBUGImxConnection[6] org.logicalcobwebs.proxool.ImxDB - 006418 (01/02/00) -Connection #8 served
14:13:29.626 INFO ImxConnection[6] imx.dbo.ImxOnlineInfoRow - EXEC SQL UPDATEimx_online_info SET last_active_time = '2010-12-03 14:13:29.0' WHERE account ='zhy'
14:13:29.627 DEBUGImxConnection[6] org.logicalcobwebs.proxool.ImxDB - UPDATE imx_online_info SETlast_active_time = '2010-12-03 14:13:29.0' WHERE account = 'zhy'; (0milliseconds)
14:13:29.653 DEBUGImxConnection[6] org.logicalcobwebs.proxool.ImxDB - 006418 (00/02/00) -Connection #8 returned (now AVAILABLE)
Ctrl+C
[root@webimx_server]#
⑸ Linux怎麼使用nmon監控性能,分析系統性能數據
用Nmon監控Linux系統性能的方法請參見下面介紹(配圖):
1、安裝Nmon
2、一旦安裝完成,則可以通過在終端執行 nmon 命令啟動它。
Nmon命令執行之後,大家可以看到如下輸出:
3、從上圖中大家可以看到,Nmon 命令行工具是一個用戶交互的應用程序,大家可以非常方便地使用鍵盤快捷鍵來查看相關統計信息。
q : 停止並退出Nmon
h : 查看幫助信息
c : 查看 CPU 統計信息
m : 查看內存統計信息
d : 查看磁碟統計信息
k : 查看內核統計信息
n : 查看網路統計信息
N : 查看 NFS 統計信息
j : 查看文件系統統計信息
t : 查看 Top 進程統計信息
V : 查看虛擬內存統計信息
v : 詳細輸出模式
4、查看 CPU 統計信息
如果你想查看 CPU 性能信息,可以直接按 c 鍵:
5、查看 Top 進程統計信息
如果你想查看 Top 進程統計信息,可以直接按 t 鍵:
6、查看網路統計信息
如果你想查看網路統計信息,可以直接按 n 鍵:
7、磁碟I/O圖
使用 d 鍵可以查看磁碟統計信息:
8、查看內核統計信息
如果你想查看內核統計信息,可以直接按 k 鍵:
9、獲取系統信息
如果要查看 Linux 的系統信息,如:系統架構、操作系統版本、Linux 版本則可以使用 r 鍵,這對系統管理員非常有用。
以上是基礎使用方法。下面再補充一些命令和方法:
1、啟動
打開nmon所在的目錄:cd /usr/local/nmon
修改啟動文件的訪問許可權:chmod 755 nmon_x86_rhel52
啟動nmon:./nmon_x86_rhel52
如果要采樣nmon的數據保存成文件,可以
./nmon_x86_rhel52 -fT -s 30 -c 120
其中30表示每隔30秒nmon取一次系統性能數據,120表示取120次;
這樣nmon將會在運行開始算起連續取得30sX120=60分鍾,可根據實際需要時間調整;當運行以上命令後該目錄下會生成一個.nmon文件,該文件會根據間隔時間被寫入性能數據,當一段時間後再查看該文件,文件位元組變大
利用nmonanalyser分析.nmon文件
當測試結束的同時ftp到伺服器上將.nmon文件get下來,
打開nmon_analyser.zip 包下的nmon analyser v338.xls 文件,點擊Analyse nomn data按鈕,選擇之前get來下的.nmon文件。
(如果報告以下宏的安全級別太高錯誤,則在「工具 -- 宏 --安全性」里把級別調低,然後重新打開 nmon analyser v338.xls 文件)
待分析結束後會生成性能分析結果文件(文件格式為.xls,其中包括CPU,IO,內存等性能分析報告)。
分析結果中有很多數據和圖形,簡要介紹主要的性能參數圖像
4.1 系統匯總(對應excel標簽的『SYS_SUMM』)
藍線為cpu佔有率變化情況;
粉線為磁碟IO的變化情況;
4.2磁碟讀寫情況匯總(對應excel標簽的『DISK_SUMM』)
藍色為磁碟讀的速率KB/sec
紫色為磁碟寫的速率KB/sec
4.3內存情況匯總(對應excel標簽的『MEM』)
曲線表示內存剩餘量(MB)
分析數據得到的報告文件(.xls)中包含很多性能分析結果數據,根據自己的需要查看。
2、nmon運行本身就消耗系統資源的;
另外如果取到.nmon文件後確定不再需要nmon繼續收集信息則應kill掉nmon;
命令:
ps -A | grep nmon #得到pid
kill -9 pid
suse10 enterprise sp2:
nmon_x86_rhel3
使用對應的操作系統文件:
chmod +x nmon_x86_ubuntu810
mv nmon_x86_ubuntu810 /usr/local/bin/nmon
對於 Debian 還要做以下操作(不做也同樣能運行):
apt-get install lsb-release
lsb_release -d | sed 's/Description:\t//' > /etc/debian_release
然後直接運行 nmon 即可。
採集數據並生成報表:
採集數據:
nmon -s10 -c60 -f -m /home/
參數解釋:
-s10 每 10 秒採集一次數據。
-c60 採集 60 次,即為採集十分鍾的數據。
-f 生成的數據文件名中包含文件創建的時間。
-m 生成的數據文件的存放目錄。
這樣就會生成一個 nmon 文件,並每十秒更新一次,直到十分鍾後。
生成的文件名如: hostname_090824_1306.nmon ,"hostname" 是這台主機的主機名。
生成報表:
下載 nmon analyser (生成性能報告的免費工具):
http://www.ibm.com/developerworks/wikis/display/Wikiptype/nmonanalyser
把之前生成的 nmon 數據文件傳到 Windows 機器上,用 Excel 打開分析工具 nmon analyser v33C.xls 。點擊 Excel 文件中的 "Analyze nmon data" 按鈕,選擇 nmon 數據文件,這樣就會生成一個分析後的結果文件: hostname_090824_1306.nmon.xls ,用 Excel 打開生成的文件就可以看到結果了。
如果宏不能運行,需要做以下操作:
工具 -> 宏 -> 安全性 -> 中,然後再打開文件並允許運行宏。
自動按天採集數據:
在 crontab 中增加一條記錄:
0 0 * * * root nmon -s300 -c288 -f -m /home/ > /dev/null 2>&1
300*288=86400 秒,正好是一天的數據。
采樣文件越來越大:
[email protected].***:~/nmon# ./nmon -s1 -c33 -f
[email protected].***:~/nmon#
[email protected].***:~/nmon# -sh *
8.0K AD39_***_sles10_101207_1046.nmon
160K nmon
[email protected].***:~/nmon# -sh *
12K AD39_***_sles10_101207_1046.nmon
160K nmon
[email protected].***:~/nmon# -sh *
16K AD39_***_sles10_101207_1046.nmon
160K nmon
[email protected].***:~/nmon# -sh *
20K AD39_***_sles10_101207_1046.nmon
160K nmon
[email protected].***:~/nmon# -sh *
20K AD39_***_sles10_101207_1046.nmon
160K nmon
註:以上一些機器名稱或系統名稱,請根據實際情況自行調整及修改。
⑹ 在linux中實現操作系統的文件使用率的監控如果發現有文件系統>=80%記錄當前時間及具體文件名稱和使用率
這個好像有系統監控軟體的。。不用費勁寫腳本的!!!gnome什麼的軟體、、、、