文章目录
前言
对于Linux下,服务器变慢后,对我们应进行的诊断思路,予以记录!
模拟Linux环境下服务器变慢情况,示例代码:
package com.kqli.oom;
import java.util.Random;
public class HeapSpaceDemo {
public static void main(String[] args) {
int i = 0;
while (true) {
System.out.println(new Random().nextInt(1000) + ",这是第" + (++i) + "次");
}
}
}
Linux下执行命令:
javac -d HeapSpaceDemo.java
java com/kqli/oom/HeapSpaceDemo
一、查看整机情况:top
可查看当前CPU,内存占用与负载均衡等各项情况,按1可以查看当前cpu状态(常用参数top -Hp)
top命令主要关注:
- COMMAND:命令
- %CPU:CPU占用
- %MEM:内存占用
- load average:负载均衡,分别表示,系统1分钟、5分钟与15分钟的平均负载值(三个值相加/3 * 100%若高于60%则表示系统负载压力大)
uptime,系统性能命令的精简版,简略打印出当前用户数,负载均衡情况等
二、查看cpu情况:vmstat -n 2 3
1、vmstat -n 2 3
vmstat -n 2 3每两秒采样一次,共采样三次
vmstat主要关注:
- procs下的r(Runntime Process)与b(Blocking process)
- cpu下的us(User)与sy(System)
2、查看所有CPU核信息:mpstat -P ALL 2(ubuntu上不可用)
ubuntu上不可用
3、查看每个进程使用的cpu的用量分解信息:pidstat -u 1 -p 进程编号(ubuntu上不可用)
ubuntu上不可用
三、查看内存情况:free -m
应用程序可用内存/系统物理内存>70%内存充足
应用程序可用内存/系统物理内存<20%内存不足,需要增加内存
20%<应用程序可用内存/系统物理内存<70%内存基本够用
1、free -m
free精确K值
free -g 粗略M值
free -m 精确M值
2、pidstat -p 进程号 -r 采样间隔秒数(ubuntu上不可用)
四、查看硬盘情况:df -h
-h 用人类理解的单位大小描述
五、查看磁盘IO:iostat(ubuntu上不可用)
1、磁盘性能评估:iostat -xdk 2 3
看%util
2、pidstat -d 采样间隔秒数 -p 进程号(ubuntu上不可用)
六、查看网络IO:ifstat 1
默认要下载
ifstat 1:每秒1次采样
总结:生产环境中CPU占用过高问题定位与分析思路
1、top命令找出CPU占比最高的应用程序进程
2、ps -ef | grep 【COMMAND】 | grep -v grep或jps -l进一步定位此应用进程所在包名
jps -l
ps -ef | grep java | grep -v grep
3、定位到具体某线程:ps -mp 进程号 -o THREAD,tid,time
-m显示所有的线程
-p pid进程使用cpu的时间
-o 该参数后是用户自定义格式
ps -mp 5734 -o THREAD,tid,time
找到占CPU最多的线程ID
4、将十进制线程ID转换为十六进制格式(英文小写格式)
5735(十进制)== 1667(十六进制)
5、定位到某行代码:jstack 【进程id】 | grep 【tid十六进制小写英文格式】 -A60
jstack 【进程id】 | grep 【tid十六进制小写英文格式】 -A60
-A打印出前多少行
jstack 5734 | grep 1667 -A60