#以下总结了部分服务器性能及稳定性测试时,定位性能瓶颈的常用命令:
一、内存监控
free :查看内存使用情况
vmstat 3(间隔时间) 100(监控次数) :查看swap in/out 定位性能瓶颈
sar -r 3(间隔时间) :查看内存使用情况,不包含swap信息
二、CPU监控
ps -LP <pid> cu :按照<pid>的cpu消耗排序
cat /proc/cpuinfo | grep processor | wc -l :CPU核数
top :查看cpu总体消耗,及分项消耗如user,system,idle,nice等
其中配合使用:
显示java线程:shift + h
Memory进行排序 : shift + M
cpu进行排序 : shift + P
cpu累积时间进行排序:shift + T
top -H :按照CPU消耗高低进行排序
sar -u 3(间隔时间) :
sar -q :查看cpu load
top -b -n 1 | awk '{if(NR<=7)print;else if($8=="D"){print;count++}}END{print "Total status D : "count}' :计算cpu load中uninterruptedsleep数量
三、网络监控
cat /var/log/messages :内核日记,用于丢包查看
watch more /proc/net/dev :定位丢包,可关注drop,观察网络包传送总量是否超过带宽上限
netstat -anp | grep ESTABLISH | wc -l :tcp 连接成功数量 (消耗cpu资源,因此推荐使用 ss state ESTABLISHED | wc -l来统计)
netstat -anp | awk '{print $6}' | sort | uniq -c | sort -nr :tcp各状态数量
cat /proc/net/snmp :查看和分析240秒内网络包量,流量,丢包等
traceroute ip :路由经过地址(可用于定位网络在各个路由区段)
dig 域名 :解析域名获得ip地址
dmesg :系统内核日志
四、磁盘监控
iostat -mx 2 : 磁盘IO详情 (当IO等待时间所占CPU时间比重较高时,首先检查机器是否在大量使用swap ,同时关注iowait 占CPU的消耗比列是否很大,如果大说明磁盘IO存在瓶颈,同时也需要关注await )
iotop :查看哪个进程在进行IO操作
df -h :常用命令
du -h:常用命令
五、应用
jstack -l pid :用于查看线程是否存在死锁
awk '(print $2)' *.log | egrep '404 | 400' | wc -l :统计某日志中400,404状态码行数,根据实际情况更改
grep ‘'keywords' **.log | awk '{if($10=="200")print}' | awk '{print $2}' | more :打印包含关键字的12列数据
grep -C 5 "KEYWORDS" ***.log :打印包含关键字的前后5行日志
ps -efL | grep <pid> | wc -l :统计pid进程所创建的线程数
jstat -gc <pid> :查看pid进程的gc情况
jstat -gcnew <pid> :查看新生代内存使用情况(MTT:最大几次交换会迁入old区,TT:目前已交换次数)
jstat -gcold <pid>
jmap -histo <pid> :按内存大小排序
打印dump及gc日志,内存溢出时,打印堆栈信息:
•-XX:HeapDumpPath=/home/logs
•-XX:+PrintGCDetails
•-XX:+PrintGCTimeStamps
•-Xloggc:/usr/aaa/dump/heap_trace.txt
•-XX:+HeapDumpOnOutOfMemoryError