性能瓶頸排查linux命令整理(java后臺(tái))

ps -ef | grep tomcat

查看tomcat進(jìn)程號(hào),以及啟動(dòng)tomcat時(shí)所用的java版本

top查看服務(wù)器資源

top

load average:三個(gè)數(shù)字分別表示最近 1 分鐘清寇,5 分鐘和 15 分鐘的負(fù)責(zé)钢颂,數(shù)值越大負(fù)載越重蜻韭,一般要求不超過(guò)核數(shù)蔑担。
VIRT:virtual memory usage,進(jìn)程占用的虛擬內(nèi)存大小廉侧。
RES:resident memory usage页响,進(jìn)程常駐內(nèi)存大小,也就是實(shí)際內(nèi)存占用情況段誊,一般我們看進(jìn)程占用了多少內(nèi)存闰蚕,就是看的這個(gè)值。
SHR:shared memory连舍,共享內(nèi)存大小没陡,不常用。

  • us 用戶空間占用 CPU 時(shí)間比例
  • sy 系統(tǒng)占用 CPU 時(shí)間比例
  • ni 用戶空間改變過(guò)優(yōu)先級(jí)的進(jìn)程占用 CPU 時(shí)間比例
  • id CPU 空閑時(shí)間比
  • wa IO等待時(shí)間比(IO等待高時(shí)索赏,可能是磁盤性能有問(wèn)題了)
  • hi 硬件中斷
  • si 軟件中斷
  • st steal time
    ps:在top沒(méi)命令模式下盼玄,按1查看每個(gè)cpu每個(gè)核心運(yùn)行情況,P:按CPU使用率從高到底排序輸出潜腻,M:按內(nèi)存占用從高到底排序輸出(或者按“F”埃儿,再選擇需要排序的字段,按下s確認(rèn)即可)

top -Hp pid

查看指定進(jìn)程下的線程信息

printf '%x\n' pid

將pid轉(zhuǎn)換為16進(jìn)制

jps

列出本機(jī)所有java進(jìn)程的PID

jstack -l pid > stack

保存java的堆棧信息到文件融涣。檢查非空閑狀態(tài)的線程童番,如果大量線程都停留在同一個(gè)位置精钮,那么很可能這個(gè)位置就是程序的瓶頸

jstat -gcutil -h3 pid 1000

每1000ms打印一次gc信息,每3行輸出一次表頭

jmap -heap pid

顯示堆內(nèi)存信息

jmap -histo pid

顯示對(duì)象內(nèi)存信息

jmap -dump:live,format=b,file=heapdump.phrof pid

將dump信息保存成文件剃斧,可以通過(guò)visualVM或者M(jìn)AT工具分析該文件杂拨,找出占用大量?jī)?nèi)存的對(duì)象。如果jvm內(nèi)存被迅速占滿并引起大量full gc悯衬,檢查是否有某個(gè)地方一次性加載了大量的對(duì)象到內(nèi)存中,比如一次性讀取數(shù)據(jù)庫(kù)表中所有的數(shù)據(jù)檀夹,又或者從網(wǎng)絡(luò)上接收數(shù)據(jù)包很大(幾百kb的數(shù)據(jù)包筋粗,并發(fā)時(shí)也可能達(dá)到上百兆)

查看網(wǎng)絡(luò)狀態(tài)

sar -n TCP 1(查看tcp統(tǒng)計(jì)信息,每秒打印一次)

TCP

active/s:新的 TCP 主動(dòng)連接(也就是 socket 中的 connect() 事件)炸渡,單位是:連接數(shù)/s娜亿。
passive/s:新的 TCP 被動(dòng)連接(也就是 socket 中的 listen() 事件)。
iseg/s:接收的段(傳輸層以段為傳輸單位)蚌堵,單位是:段/s
oseg/s:發(fā)送的段买决。

sar -n DEV 1(查看網(wǎng)絡(luò)接口統(tǒng)計(jì)信息,每秒打印一次)

網(wǎng)絡(luò)接口統(tǒng)計(jì)信息

rxpck/s / txpck/s:網(wǎng)卡接收/發(fā)送的數(shù)據(jù)包吼畏,單位是:數(shù)據(jù)包/s督赤。
rxkB/s / txkB/s:網(wǎng)卡接收/發(fā)送的千字節(jié),單位是:千字節(jié)/s泻蚊。
rxcmp/s / txcmp/s:網(wǎng)卡每秒接受/發(fā)送的壓縮數(shù)據(jù)包躲舌,單位是:數(shù)據(jù)包/s。
rxmcst/s:每秒接收的多播數(shù)據(jù)包性雄,單位是:數(shù)據(jù)包/s没卸。

netstat -tulnp(列出所有 tcp與udp 端口)

Proto:協(xié)議名(tcp協(xié)議還是udp協(xié)議)
recv-Q:網(wǎng)絡(luò)接收隊(duì)列
表示收到的數(shù)據(jù)已經(jīng)在本地接收緩沖,但是還有多少?zèng)]有被進(jìn)程取走秒旋,recv()
send-Q:網(wǎng)路發(fā)送隊(duì)列
對(duì)方?jīng)]有收到的數(shù)據(jù)或者說(shuō)沒(méi)有Ack的,還是本地緩沖區(qū).
這兩個(gè)值通常應(yīng)該為0约计,如果不為0可能是有問(wèn)題的。packets在兩個(gè)隊(duì)列里都不應(yīng)該有堆積狀態(tài)迁筛∶喊觯可接受短暫的非0情況。
Local Address:監(jiān)聽(tīng)的本地地址瑰煎,0.0.0.0表示監(jiān)聽(tīng)所有本地地址铺然。
Foreign Address:監(jiān)聽(tīng)的外部地址

抓包

tcpdump -i eth0 'dst host 192.168.2.111' -w luo.pcap
抓取所有經(jīng)過(guò)網(wǎng)卡eth0到目標(biāo)地址的包
tcpdump -i eth0 'src host 192.168.2.111' -w luo.pcap
抓取所有來(lái)自目標(biāo)主機(jī)的包
tcpdump -i eth0 'host 192.168.2.111' -w luo.pcap
抓取所有和目標(biāo)主機(jī)通信的包信息

查看連接狀態(tài)

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

CLOSED:表示初始狀態(tài)
LISTEN:表示服務(wù)器端的某個(gè)SOCKET處于監(jiān)聽(tīng)狀態(tài),可以接受連接了
SYN_RCVD: 這個(gè)狀態(tài)表示接受到了SYN報(bào)文
SYN_SENT:表示客戶端已發(fā)送SYN報(bào)文
ESTABLISHED:表示連接已經(jīng)建立了
FIN_WAIT_1:表示等待對(duì)方的FIN報(bào)文(當(dāng)SOCKET在ESTABLISHED狀態(tài)時(shí)酒甸,它想主動(dòng)關(guān)閉連接魄健,向?qū)Ψ桨l(fā)送了FIN報(bào)文,此時(shí)該SOCKET即進(jìn)入到FIN_WAIT_1狀態(tài))
FIN_WAIT_2:表示半連接插勤,也即有一方要求close連接沽瘦,但另外還告訴對(duì)方革骨,我暫時(shí)還有點(diǎn)數(shù)據(jù)需要傳送給你,稍后再關(guān)閉連接
TIME_WAIT: 表示收到了對(duì)方的FIN報(bào)文析恋,并發(fā)送出了ACK報(bào)文良哲,就等2MSL后即可回到CLOSED可用狀態(tài)了
CLOSING: 表示雙方都正在關(guān)閉SOCKET連接
CLOSE_WAIT: 表示在等待關(guān)閉
LAST_ACK:它是被動(dòng)關(guān)閉一方在發(fā)送FIN報(bào)文后,最后等待對(duì)方的ACK報(bào)文助隧。當(dāng)收到ACK報(bào)文后筑凫,也即可以進(jìn)入到CLOSED可用狀態(tài)了
time_wait狀態(tài)產(chǎn)生的原因,危害并村,如何避免

查看CPU信息

lscpu(查看cpu基本信息)

cpu

Architecture: #架構(gòu)
CPU(s): #邏輯cpu顆數(shù)
Thread(s) per core: #每個(gè)核心線程
Core(s) per socket: #每個(gè)cpu插槽核數(shù)/每顆物理cpu核數(shù)
socket(s): #cpu插槽數(shù)
Vendor ID: #cpu廠商ID
CPU family: #cpu系列
Model: #型號(hào)
Stepping: #步進(jìn)
CPU MHz: #cpu主頻
Virtualization: #cpu支持的虛擬化技術(shù)
L1d cache: #一級(jí)緩存(表示cpu的L1數(shù)據(jù)緩存)
L1i cache: #一級(jí)緩存(L1指令緩存)
L2 cache: #二級(jí)緩存

cat /proc/cpuinfo(查看cpu基本信息巍实,具體到每一個(gè)核)

mpstat 2 5(查看cpu當(dāng)前運(yùn)行的狀況,每?jī)擅敫乱淮瘟梗还哺?次)

%user 在internal時(shí)間段里棚潦,用戶態(tài)的CPU時(shí)間(%),不包含nice值為負(fù)進(jìn)程 (usr/total)100
%nice 在internal時(shí)間段里膝昆,nice值為負(fù)進(jìn)程的CPU時(shí)間(%) (nice/total)
100
%sys 在internal時(shí)間段里丸边,內(nèi)核時(shí)間(%) (system/total)100
%iowait 在internal時(shí)間段里,硬盤IO等待時(shí)間(%) (iowait/total)
100
%irq 在internal時(shí)間段里荚孵,硬中斷時(shí)間(%) (irq/total)100
%soft 在internal時(shí)間段里妹窖,軟中斷時(shí)間(%) (softirq/total)
100
%idle 在internal時(shí)間段里,CPU除去等待磁盤IO操作外的因?yàn)槿魏卧蚨臻e的時(shí)間閑置時(shí)間(%) (idle/total)*100

vmstat 1 (查看cpu收叶,內(nèi)存嘱吗,io信息)

vmstat

r 值:表示在 CPU 運(yùn)行隊(duì)列中等待的進(jìn)程數(shù),如果這個(gè)值很大滔驾,表示很多進(jìn)程在排隊(duì)等待執(zhí)行谒麦,CPU 壓力大。
in 和 cs 值:表示中斷次數(shù)和上下文切換次數(shù)哆致,這兩個(gè)值越大绕德,表示系統(tǒng)在進(jìn)行大量的進(jìn)程(或線程)切換。切換的開(kāi)銷是非常大的摊阀,這時(shí)候應(yīng)該減少系統(tǒng)進(jìn)程(或線程)數(shù)耻蛇。
us、sy胞此、id臣咖、wa 值:和top的指標(biāo)一致。
b 漱牵,bi 和 bo 值:b值表示因?yàn)?IO 阻塞排隊(duì)的任務(wù)數(shù)夺蛇。bi 和 bo 值表示每秒讀寫(xiě)磁盤的塊數(shù),bi(block in)是寫(xiě)磁盤酣胀,bo(block out)是讀磁盤刁赦。一般這幾個(gè)值偏大娶聘,都意味著系統(tǒng) IO 的消耗較大,對(duì)于讀請(qǐng)求較大的服務(wù)器甚脉,b丸升、bo、wa 的值偏大牺氨,而寫(xiě)請(qǐng)求較大的服務(wù)器狡耻,b、bi猴凹、wa 的值偏大酝豪。
wa 值:表示因?yàn)?IO 等待(wait)而消耗的 CPU 比例。

dstat (查看cpu精堕,磁盤io,網(wǎng)絡(luò)發(fā)包蒲障,換頁(yè)歹篓,系統(tǒng)統(tǒng)計(jì))

dstat

內(nèi)存分析

cat /proc/meminfo(查看內(nèi)存基本信息)

free -m (查看剩余內(nèi)存)

鎖競(jìng)爭(zhēng)

pidstat -w -p pid(查看上下文切換次數(shù))

cswch:是指進(jìn)程無(wú)法獲取所需資源,導(dǎo)致的上下文切換揉阎。比如說(shuō)庄撮, I/O、內(nèi)存等系統(tǒng)資源不足時(shí)毙籽,就會(huì)發(fā)生自愿上下文切換洞斯。
nvcswch:則是指進(jìn)程由于時(shí)間片已到等原因,被系統(tǒng)強(qiáng)制調(diào)度坑赡,進(jìn)而發(fā)生的上下文切換烙如。比如說(shuō),大量進(jìn)程都在爭(zhēng)搶 CPU時(shí)毅否,就容易發(fā)生非自愿上下文切換亚铁。
如果系統(tǒng)的上下文切換次數(shù)比較穩(wěn)定,那么從數(shù)百到一萬(wàn)以內(nèi)螟加,都應(yīng)該算是正常的徘溢。但當(dāng)上下文切換次數(shù)超過(guò)一萬(wàn)次,或者切換次數(shù)出現(xiàn)數(shù)量級(jí)的增長(zhǎng)時(shí)捆探,就很可能已經(jīng)出現(xiàn)了性能問(wèn)題然爆。

磁盤分析

fdisk (查看磁盤基本信息)
df -h(查看磁盤使用情況)

iostat -c(查看部分cpu使用情況)

iostat-c

%iowait:表示 CPU 等待 IO 完成時(shí)間的百分比
%idle:CPU 空閑時(shí)間百分比

如果 %iowait 較高,則表明磁盤存在 IO 瓶頸黍图,如果 %idle 較高曾雕,則 CPU 比較空閑,如果兩個(gè)值都比較高助被,則有可能 CPU 在等待分配內(nèi)存翻默,瓶頸在內(nèi)存缸沃,此時(shí)應(yīng)該加大內(nèi)存,如果 %idle 較低修械,則此時(shí)瓶頸在 CPU趾牧,應(yīng)該增加 CPU 資源。

iostat -d -k -x(查看磁盤使用情況肯污,主要顯示IOPS和吞吐量信息)

iostat -d -k

tps:設(shè)備每秒的傳輸次數(shù)(transfers per second)翘单,也就是讀寫(xiě)次數(shù)。
kB_read/s 和 kB_wrtn/s:每秒讀寫(xiě)磁盤的數(shù)據(jù)量蹦渣。
kB_read 和 kB_wrtn:讀取磁盤的數(shù)據(jù)總量哄芜。

iostat -x(查看磁盤詳細(xì)信息)

iostat -x

rrqm/s 和 wrqm/s:分別每秒進(jìn)行合并的讀操作數(shù)和寫(xiě)操作數(shù),這是什么意思呢柬唯,合并就是說(shuō)把多次 IO 請(qǐng)求合并成少量的幾次认臊,這樣可以減小 IO 開(kāi)銷,buffer 存在的意義就是為了解決這個(gè)問(wèn)題的锄奢。
r/s 和 w/s:每秒磁盤讀寫(xiě)的次數(shù)失晴。這兩個(gè)值相加就是 tps。
rkB/s 和 wkB/s:每秒磁盤讀寫(xiě)的數(shù)據(jù)量
avgrq-sz:平均每次讀寫(xiě)磁盤扇區(qū)的大小拘央。
avgqu-sze:平均 IO 隊(duì)列長(zhǎng)度涂屁。隊(duì)列長(zhǎng)度越短越好。
await:平均每次磁盤讀寫(xiě)的等待時(shí)間(ms)灰伟。
svctm:平均每次磁盤讀寫(xiě)的服務(wù)時(shí)間(ms)拆又。
%util:一秒鐘有百分之多少的時(shí)間用于磁盤讀寫(xiě)操作。

TIME_WAIT問(wèn)題解決

查看端口范圍

sysctl -a | grep net.ipv4.ip_local_port_range

修改端口范圍

vi /etc/sysctl.conf
net.ipv4.ip_local_port_range = 10000 65000
sysctl -p 讓修改生效
最小值必須大于等于1024栏账,最大值必須小于等于65535

允許TCP連接重復(fù)使用TIME_WAIT狀態(tài)的句柄/端口

查看:sysctl -a | grep net.ipv4.tcp_tw_reuse
修改:echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
注意帖族,客戶端服務(wù)端必須同時(shí)打開(kāi)tcp_timestamps(默認(rèn)打開(kāi))
sysctl -w net.ipv4.tcp_fin_timeout=3 (這個(gè)修改可能沒(méi)什么效果)

轉(zhuǎn)載自:
https://mp.weixin.qq.com/s?__biz=MzI1OTY2MzMxOQ==&mid=2247484103&idx=1&sn=d437fd54bac8ac00522aa4538ca9c7a1&chksm=ea74367fdd03bf699d603f39836bb35c0e6190f6781e0eda104a3710705034293255e85bd6b4&scene=21#wechat_redirect
https://mp.weixin.qq.com/s?__biz=MzI1OTY2MzMxOQ==&mid=2247484295&idx=1&sn=cd82eba9d73f816210b2a99f29b85040&chksm=ea74373fdd03be2942ebeffeebebf52f229f0cb7b724e406ff79d050d67db70584c6efbcde85&scene=21#wechat_redirect
https://mp.weixin.qq.com/s?__biz=MzI1OTY2MzMxOQ==&mid=2247484192&idx=1&sn=ea9aa805a5c0ac1e0b55e5477c79d66d&chksm=ea743798dd03be8e4e07bd8e173fa7e447b13cbd0cdcc287ae917b6b99d616bce801450ac22b&scene=21#wechat_redirect
https://mp.weixin.qq.com/s?__biz=MzI1OTY2MzMxOQ==&mid=2247484208&idx=1&sn=b1429f0f07d69a44248cc78d3942c5c9&chksm=ea743788dd03be9e88e41df3966eb0ac8250b1741b83b19ab97e5a0980444241d17de6bbba66&scene=21#wechat_redirect
https://cloud.tencent.com/developer/article/1432483

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市挡爵,隨后出現(xiàn)的幾起案子盟萨,更是在濱河造成了極大的恐慌,老刑警劉巖了讨,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捻激,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡前计,警方通過(guò)查閱死者的電腦和手機(jī)胞谭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)男杈,“玉大人丈屹,你說(shuō)我怎么就攤上這事。” “怎么了旺垒?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵彩库,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我先蒋,道長(zhǎng)骇钦,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任竞漾,我火速辦了婚禮眯搭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘业岁。我一直安慰自己鳞仙,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布笔时。 她就那樣靜靜地躺著棍好,像睡著了一般。 火紅的嫁衣襯著肌膚如雪允耿。 梳的紋絲不亂的頭發(fā)上借笙,一...
    開(kāi)封第一講書(shū)人閱讀 49,784評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音右犹,去河邊找鬼。 笑死姚垃,一個(gè)胖子當(dāng)著我的面吹牛念链,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播积糯,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼掂墓,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了看成?” 一聲冷哼從身側(cè)響起君编,我...
    開(kāi)封第一講書(shū)人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎川慌,沒(méi)想到半個(gè)月后吃嘿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡梦重,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年兑燥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片琴拧。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡降瞳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蚓胸,到底是詐尸還是另有隱情挣饥,我是刑警寧澤除师,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站扔枫,受9級(jí)特大地震影響汛聚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜茧吊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一贞岭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧搓侄,春花似錦瞄桨、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至乳讥,卻和暖如春柱查,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背云石。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工唉工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人汹忠。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓淋硝,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親宽菜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谣膳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容