一、 常用命令
pstree查看進程樹。可以很清楚的看到進程之間的關系;
Top:查看各進程的占用資源的情況;
du -h --max-depth=1 顯示當前目錄中所有子目錄的大小;
w 查看服務器的load情況
bigip 在預發(fā)布機器上使用命令“bigip sh ${ip/機器名} {username}” 可以檢查機器是在F5上狀態(tài)是disable還是enable.
gm.sh "curl http://localhost/monitor/ok.html" 在預發(fā)布機器上檢查各個服務器的健康檢查頁面。
gm.sh "ps amx | grep httpd | wc -l" 在預發(fā)布機器上檢查各個服務器的http鏈接數(shù)
二、 proc下的偽文件。 如:meminfo 檢查內(nèi)存信息,cpuinfo 內(nèi)核信息。
cat /proc/cpuinfo 檢查cpu的信息。我們的一些程序根據(jù)cpu內(nèi)核的數(shù)量做過優(yōu)化(如:memcached,假的多核可能會引起一些bug。)
如上圖 baike-web1 是4核的,baike-web2是雙核超線程的。
擁有相同 physical id 的所有邏輯處理器共享同一個物理插座。每個 physical id 代表一個唯一的物理封裝。Siblings 表示位于這一物理封裝上的邏輯處理器的數(shù)量,如果不存在表示1。每個 core id 均代表一個唯一的處理器內(nèi)核。所有帶有相core id 的邏輯處理器均位于同一個處理器內(nèi)核上。如果有一個以上邏輯處理器擁有相同的 core id 和 physical id,則說明系統(tǒng)支持超線程(HT)技術。如果有兩個或兩個以上的邏輯處理器擁有相同的 physical id,但是 core id不同,則說明這是一個多內(nèi)核處理器。
三、 網(wǎng)絡連接
netstat: -t: 顯示TCP鏈接信息;-u: 顯示UDP鏈接信息;-n直接顯示ip,不做名稱轉(zhuǎn)換;-p: 顯示相應的進程PID以及名稱(要root權限)
如果要查看關于sockets更詳細占用信息等,可以使用lsof.
a) netstat -anp|grep Java|grep 3306|wc –l檢查Java進程中數(shù)據(jù)庫的鏈接數(shù)量
b) netstat -na|grep ESTABLISHED|awk '{print $4}'|grep ":80$"|wc –l 檢查已經(jīng)建立的80端口的連接數(shù)
c) netstat -na |grep “:2088” 檢查搜索引擎的連接數(shù)
四、 dump java進程堆棧
a) kill -3 ${java進程Id},可以在java進程的日志中看到輸出(jboss 記錄在jboss_stdout.log中)
b) jstack $pid. 直接dump當前進程的的堆棧信息。
對于thread dump信息,主要關注的是線程的狀態(tài)和其執(zhí)行堆棧,特別是load很高的時候,通過thread dump可以看到線程到底在干嘛,從中找出問題。 線程的狀態(tài)一般為三類: runable:當前可以運行的線程, Waiting on monitor:線程主動wait, Waiting for monitor entry:線程等鎖. Cpu很忙則關注runnable的線程,Cpu閑則關注waiting for monitor entry的線程。
五、 java內(nèi)存溢出
1、 可以先用 jstat -gcutil ${pid} {interval} 看看java內(nèi)存回收的動態(tài)信息。 interval– 表示間隔打印的時間,單位為毫秒
圖中參數(shù)含義如下:
S0 — Heap上的 Survivor space 0區(qū)已使用空間的百分比
S1 — Heap上的 Survivor space 1 區(qū)已使用空間的百分比
E — Heap上的 Eden space 區(qū)已使用空間的百分比
O — Heap上的 Old space 區(qū)已使用空間的百分比
P — Perm space 區(qū)已使用空間的百分比
YGC — 從應用程序啟動到采樣時發(fā)生 Young GC 的次數(shù)
YGCT– 從應用程序啟動到采樣時 Young GC 所用的時間(單位秒)
FGC — 從應用程序啟動到采樣時發(fā)生 Full GC 的次數(shù)
FGCT– 從應用程序啟動到采樣時 Full GC 所用的時間(單位秒)
2. 使用jmap 來dump java內(nèi)存中全部對象,分析死鎖的位置。
jmap -histo $pid 快速查看當前內(nèi)存中各個Java對象的大小和數(shù)量
jmap -dump:live,format=b,file=heap.dmp $pid 可以將jvm堆棧中的信息全部復制到文件head.dmp中,注意這個heap.dmp文件會比較大, 線上jboss分配的內(nèi)存一般為2g,當內(nèi)存溢出時dump出來的head.dmp文件也是2g,所以dump的時間也比較長,一般會有半個小時.
日志文件生成后運行命令“jhat -J-mx768m -port 7001 heap.dmp”分析堆棧日志(注意不要在線上服務器上分析)。 訪問 http://localhost:7001可以查看分析報告。
或者可以使用eclipse 的mat插件分析,它可以以圖形形式分析出內(nèi)存中的java對象的分布: (插件地址http://download.eclipse.org/mat/1.0/update-site/).導入后可以生成一個圖形報表
六、 7001端口報警。
一般情況是jboss掛掉了。因為java進程已經(jīng)退出。1首先需要查看:jboss_stdout.log,它會告訴你jboss crash的一些信息,它還會告訴你在jboss crash有一個詳細的出錯報告, 位置在/web-deploy/bin/hs_err_pid.log
七、 cookie日志分析
cat cookie_log|awk '{print $1} '|grep -v "172.16"|grep -v "127.0.0.1"|sort|uniq -c|sort -n |tail -n 10 提取訪問量前10位的ip.
cat cookie_log |grep '09/Dec/2010:18:01'|wc –l 檢查18:01這一分鐘的訪問總量。
cat cookie_log|grep 'HTTP/.../" [4|5]'|more 查看響應出錯的請求。
cat cookie_log |grep -E 'Googlebot|Baiduspider'|wc –l統(tǒng)計google和baike爬蟲的訪問量。