假如CPU占用较高,环境变慢,如何分析和定位?
假如CPU占用较高,如何分析和定位?
答: 需要JDK命令&Linux命令结合分析
- top定位CPU占比较高的进程;
- ps -ef 或者 jps 进一步定位,找出后台对应运行的程序 <—— ps -ef|grep java| gerp -v grep 或者 找出java进程 <——>jps -l
- 定位到具体线程或者代码 ps -mp 进程号 -o THREAD, tid, time
- 将需要的线程ID 转换为十六进制格式(英文小写格式) <—— printf %x\n 有问题的线程的ID
-
jstack 进程ID | grep tid(十六进制线程ID小写英文) -A60 A60<——> 打印前60行
第5步定位代码行号
生产环境变慢,你的思路和性能评估?
整机: top
CPU: vmstat
内存: free <—— free m
硬盘: df <—— df -h
磁盘IO: iostat <—— iostat -xdk 2 3
网络IO: ifstat
top
主要查看%CPU
、%MEM
,还有load average
。load average
后面的三个数字,表示系统1分钟、5分钟、15分钟的平均负载值。如果三者平均值高于0.6,则 负载比较高了。当然,用uptime
也可以查看。
load average 高于60% 负载就很高了
查看CPU核心信息:
vmstat
查看进程、内存、I/O等多个系统运行状态。2表示每两秒采样一次,3表示一共采样3次。procs
的r
表示运行和等待CPU时间片的进程数,原则上1核CPU不要超过2。b
是等待资源的进程数,比如磁盘I/O、网络I/O等。
所有核信息,每2秒采样一次并打印
free 查看内存信息
pidstat -p 进程号 -r 采样间隔秒数
iostat -xdk 2 3
pidstat -d 2 -p 进程号
安装ifstat
查看网络IO
ifstat 秒数