一些常用的监控命令,帮助排查性能问题
内存瓶颈
free查看内存使用情况vmstat 3 (间隔时间) 1000 (监控次数)查看 swap in/out 详细定位是否存在内存瓶颈 推荐sar -r 3和 free 命令类似,查看内存的使用情况,但是不包含 swap 的情况
CPU 瓶颈
top -H按照 CPU 消耗的高低进行线程排序ps -Lp $进程号 cu查看某个进程的线程 CPU 消耗排序cat /proc/CPUinfo |grep 'processor' |wc -l查看 CPU 核数top查看 CPU 的总体消耗,包括分项消耗,如 User、System、Idle、nice 等sar -u 3查看 CPU 总体消耗占比sar -q查看 CPU Load
网络瓶颈
ping $ip测试网络性能cat /var/log/messages查看内核日志,检查是否丢包watch more /proc/net/dev用于定位丢包、错包情况(关注丢包总量)sar -n SOCK查看网络流量netstat -na |grep ESTABLISHED |wc -l查看 TCP 连接成功状态的数量netstat -i查看网络错误ss stat ESTABLISHED |wc -l统计并发连接数traceroute $ip查看路由经过的地址dig $domain查看域名解析日志dmesg查看系统内核日志
磁盘瓶颈
iostat -x -k -d 1详细列出磁盘读写情况 (磁盘响应时间(AWait)应该 < 5ms)iostat -x查看系统各个磁盘的读写性能(重点看 AWait、IOWait 的 CPU 占比)iotop查看哪个进程在大量读取 I/O (一般通过iostat命令查看是否存在I/O瓶颈,在定位哪个进程在大量读写I/O)df -hl查看磁盘剩余空间du -sh查看磁盘使用了多少空间
应用瓶颈
ps -ef |grep node查看某个进程的 IDps -ef |grep node |wc -l查看特定进程的数量cat.log |grep *Exception |wc -l统计日志文件中包含特定异常的数量jstack -l $pid查看线程中是否存在死锁awk '{print $8}' 2023-11-01-access_log |grep '302' |wc -l统计日志中302的行数,$8这里第8列是状态码,可以按照实际情况更改grep -v 'HTTP/1.1' '200'取出非 200 响应码的 URLfind / -type f -name '*.log' | xargs grep 'error'统计所有的日志文件中包含error字符的行jstat -gc $pid查看 GC 的信息jstat -gcnew $pid查看 young 区的内存使用情况jsstat -gcold $pid查看 old 区的内存使用情况gcore $pid导出完整的内存快照