如何快速对应用系统做一个360度的画像诊断?

本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。

无论多么复杂的系统在Linux就是一个进程;
在操作系统层面都是以文件的形式来存储的,进程也不例外。

/proc 目录下面的文件就包含了很多的信息,很多工具的信息都是从这里来的。

常用目录介绍:
/proc/loadavg 前三列分别保存最近1 5 15分钟的平均负载
/proc/meminfo 当前内存使用信息
/proc/diskstats 磁盘IO统计信息列表
/proc/net/dev 网络流入流出统计信息
/proc/filesystems 支持的文件系统
/proc/cpuinfo cpu的详细信息
/proc/cmdline 启动时传递至内核的启动参数
/proc/mounts 系统当前挂载的文件系统
/proc/uptime 系统运行时间
/proc/version 当前运行的内核版本号

/proc/pid/ 目录下面有该pid进程对应的所有的信息,日志输出到哪里,启动加载哪个jar包,使用的哪个java版本等信息

回头再手动补充下
https://www.cnblogs.com/zydev/p/8728992.html

查看该pid 与哪些端口连接在这里插入图片描述

在这里插入图片描述

性能上看关注两件事:吞吐量和响应性

分析一、

cpu利用率不高,但是系统的吞吐量和响应性却不理想,说明程序没有忙于计算,可能问题出现在I/O上。
IO和CPU利用率一般成反比,CPU利用高则IO不大,IO大则CPU利用率小。
IO注意:磁盘IO,驱动程序IO,内存换页率。
再看看网络带宽情况。

如果IO,cpu,网络都没问题,程序性能还是上不去
1、可能就是程序被阻塞了
2、或者某个资源,接口返回等在等待
3、上下文的切换

ps:就是从视频中的内容记录下来,有些东西还不理解…

可能影响系统的性能有:IO,内存,cpu
在这里插入图片描述

一级缓存最快:比如桌子上拿起一张纸,3s
二级缓存稍慢:比如书架上拿起一张纸,14s
从主存(内存)中:相当于下楼去买个零售,4分钟
磁盘:相当于离开办公大楼,进行15个月的环球旅行

锁竞争会导致频繁的上下文切换,导致严重的系统开销。
表现就是内核态的CPU利用率偏高。

内存:
对于java进程来说,主要关注GC就可以了。

连接:
系统对外面依赖的中间件和接口,比如数据库连接,如果连接数过大或者超时都是比较消耗性能的。

异常:
java的异常的捕获和处理是非常消耗资源的,如果程序在高频的处理异常,也会影响系统的性能。

诊断:
top : loadavg最近1分钟 5 分钟 15的系统的平均负载
是指在特定的时间间隔内,运行队列中,即CPU上运行或者等待运行的平均进程数。

pidstat :
查看某个进程占用的物理内存和虚拟内存
pidstat -r -p pid1 2

查看某个进程文件的IO情况
pidstat来查看

swap 占用过高,说明物理内存使用过高。swap消耗主要关注它的IO。如果IO发生比较频繁,也会影响系统的性能。
在这里插入图片描述

strace -T 命令 可以显示具体的系统进程间的调用情况。

网络IO 可以通过cat /proc/interrupts 查看
磁盘的使用一般通过dstat 查看

netstat 查看和外部交互的连接情况。

在这里插入图片描述
jvm在创建线程的时候,会占用堆外的物理内存,当创建了太多了线程的时候,内存不够的时候会报错。

查看某个线程的进程数:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

定位cpu过载
1、top 命令查看到是哪个进程cpu很高
2、top -Hp pid 查看到哪个线程占用cpu很高
3、printf “%x\n” 线程id (线程id 转成16进制)
4、jstack -l pid | grep -C20 xxx (过滤线程id的16进制)

就可以看出来堆栈中对应的线程id的信息

OOM
1、资源不足,给的堆大小不足
2、申请的资源太多,某个资源频繁的申请却没有释放最终导致的资源耗尽
3、某个资源在频繁的申请,比如创建新的线程,不断的发起网络连接

定位方法
1、查看设置内存大小
在这里插入图片描述

找到最消耗资源的对象:
在这里插入图片描述

pstree 和 netstat 查看进程创建出来的线程数量,连接数是否被耗尽等情况。

内存分析最有效的办法,还是dump内存文件出来,但是会进行一次FGC
导出的文件可以通过MAT或者visualVM来分析。

gc会导致jvm短暂的停顿
java 启动进程的参数中,开启gc日志,方便从gc日志中分析gc的原因。

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