linux机器变慢排查方式以及CPU占用过高排查优化

生产上遇见linux异常变慢如何排查?
基本上出现慢的问题,90%的可能都是cpu或者内存出现了问题。使用命令查看定位机器的性能细节。

1、查看整体机器性能
使用top命令。
top查看机器整体性能
1.1 cpu
1.2 mem
1.3 id=idle 机器空闲率,越高越好
1.4 load average:系统负载。后面 三个值,分别是系统1分钟,5分钟,15分钟的系统平均负载率。通过计算算出平均负载率。
1.5 command

top命令如何退出,使用q,这里不要使用ctrl+c强行中断退出。

2、乞丐版本uptime(低配版的top)
uptime最快查看整机机器性能
3、内存
free free -g free -m(一般使用free -m)
free多个命令
4、硬盘
df 或者df -h (df:disk free)磁盘剩余空间 h:human人类看的懂方式
磁盘剩余空间
5、cpu 包含但不限于
vmstat -n 2 3(n :代表数字 2:每2秒刷一次 3:3条记录)
查看cpu
6、磁盘I/O
磁盘I/O高 读写慢 八成是大sql导致系统慢了。
iostat - xdk 2 3
查看磁盘I/O情况
就看一个参数,%util%。如果长期高于>80%,要对sql进行调优处理。r/s w/s 代表读写数据。

排查linux慢的问题基本就是以上操作,是不是不难呢。但是用过逼格就有点上去了。

接下来看看一次生产环境CPU占用过高问题的排查

(结合Linux和JDK命令一块分析)

1、先用top命令找出CPU占比最高的
在这里插入图片描述
看到一个叫做id=3928 名称为java的进程CPU占用贼高,不知道搞鸡毛。

2、ps -ef或者jps进一步定位,得知是一个怎么样的一个后台程序
3、定位到具体线程或者代码
ps -mp 进程 -o THREAD,tid,time
在这里插入图片描述
上图我们就可以根据进程查看到真正占用CPU资源就是id=3929的线程

4、将需要的线程ID转换为16进制格式(英文小写格式)
printf “%x\n” 有问题的线程ID或者使用计算器计算得到
将id=3929 转换为二进制。 f59

5、 jstack 进程ID | grep tid(16进制线程ID小写英文) -A60
jstack 3928 | grep F59 -A60(打印60行记录)
在这里插入图片描述
这里由于记录文章时之前的异常没有找到 ,自己手写了一个while(true)死循环来占用,截图为我的测试代码。方法没问题。

====================================================

那同理是否可以举一反三查看内存呢?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章