CPU 高,负载高,访问慢(没有数据库)
- 记录负载开始升高的时间
- 系统层面
- 查看负载、CPU、内存、上线时间、高资源进程 PID:
htop
- 查看磁盘使用情况:
df -h
- 查看磁盘当前情况:
iostat -x -k 3 3
。如果发现当前磁盘忙碌,则查看是哪个 PID 在忙碌:iotop -o -P -k -d 5
- 查看 PID 具体在写什么东西:
lsof -p PID
- 查看系统日志:
tail -400f /var/log/messages
- 查看简化线程树:
pstree -a >> /opt/pstree-20180915.log
- 其他机子 ping(多个地区 ping),看下解析 IP 与网络丢包
- 查看网络节点情况:
traceroute www.youmeek.com
ifconfig
查看 dropped 和 error 是否在不断增加,判断网卡是否出现问题
nslookup
命令查看 DNS 是否可用
- 如果 nginx 有安装:http_stub_status_module 模块,则查看当前统计
- 查看 TCP 和 UDP 应用
netstat -ntlp
netstat -nulp
- 统计当前连接的一些状态情况:
netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
- 查看每个 ip 跟服务器建立的连接数:
netstat -nat|awk '{print$5}'|awk -F : '{print$1}'|sort|uniq -c|sort -rn
- 跟踪程序(按
Ctrl + C
停止跟踪):strace -tt -T -v -f -e trace=file -o /opt/strace-20180915.log -s 1024 -p PID
- 看下谁在线:
w
,last
- 看下执行了哪些命令:
history
- 程序、JVM 层面
- 保存、查看 Nginx 程序 log
- 保存、查看 Java 程序 log
- 使用内置 tomcat-manager 监控配置,或者使用类似工具:psi-probe
- 使用
ps -ef | grep java
,查看 PID
- 查看堆栈情况:
jstack -l PID >> /opt/jstack-tomcat1-20180917.log
- 使用
jstat -gc PID 250 10
,查看gc情况(截图)
- 使用
jstat -gccause PID
:额外输出上次GC原因(截图)
- 使用
jmap -dump:format=b,file=/opt/dumpfile-tomcat1-20180917 PID
,生成堆转储文件
- 使用 jhat 或者可视化工具(Eclipse Memory Analyzer 、IBM HeapAnalyzer)分析堆情况。
- 结合代码解决内存溢出或泄露问题。
CPU 低,负载高,访问慢(带数据库)
- 基于上面,但是侧重点在于 I/O 读写,以及是否有 MySQL 死锁,或者挂载了 NFS,而 NFS Server 出现问题
- mysql 下查看当前的连接数与执行的sql 语句:
show full processlist;
- 检查慢查询日志,可能是慢查询引起负载高,根据配置文件查看存放位置:
log_slow_queries
- 查看 MySQL 设置的最大连接数:
show variables like 'max_connections';
- 重新设置最大连接数:
set GLOBAL max_connections=300
呵呵。学习了。感触良多!