一、生产环境服务器变慢,谈谈你的诊断思路。
1、整机:top [看CPU、内存 load average(1分钟、5分钟、15分钟系统的平均负载值 三值相加/3*100% > 60% 系统负担压力大]
uptime:系统性能命令的精简版
2、查看CPU:vmstat -n 2 3
[procs r:运行和等待CPU时间片的进程数 不能超过总核数的2倍 b:等待资源的进程数]
[CPU us:用户进程消耗CPU时间百分比 sy:内核进程消耗CPU时间百分比 us+sy>80% 存在CPU不足]
mpstat -P ALL 2:查看所有CPU核信息 【idle代表CPU空闲值,越高越好】
ps -ef|grep java
pidstat -u 1 -p 进程编号:每个进程使用CPU的用量分解信息
3、查看内存:free [free -m]
[free/total>70% 内存充足 free/total<20% 内存不足]
pidstat -p 进程编号 -r 采用间隔秒数
4、查看磁盘:df -h [查看磁盘剩余空间数]
5、磁盘IO:iostat -xdk 2 3
[一秒中有百分几的时间用于IO操作 接近100%磁盘带宽跑满,需要优化程序或增加磁盘]
pidstat -p 进程编号 -d 采用间隔秒数
6、网络IO:ifstat [默认本地没有,需下载]
二、生产环境出现CPU占用过高,谈谈你的分析思路和定位
思路:结合Linux和JDK命令一起分析
1、先用top命令找出CPU占比最高的
2、ps -ef|grep java|grep -v grep 或者jps -l进一步定位
3、定位到具体线程或代码
ps -mp 进程编号 -o THREAD,tid,time [-m:显示所有线程 -p pid:进程使用CPU的时间 -o:用户自定义格式]
4、将需要的线程ID转换为16进制格式
printf "%x\n" 有问题的线程id
5、jstack 进程ID|grep tid(16进制线程小写英文)-60A