java常见面试考点(三十二):诊断生产环境服务器变慢
作者:互联网
java常见面试考点
往期文章推荐:
java常见面试考点(二十七):java里的锁总结
java常见面试考点(二十八):内部类详解
java常见面试考点(二十九):进程和线程的区别
java常见面试考点(三十):异常
java常见面试考点(三十一):连接池的作用
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权);
本博客的内容来自于:;
学习、合作与交流联系q384660495;
本博客的内容仅供学习与参考,并非营利;
文章目录
一、整机:top
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。下面详细介绍它的使用方法。
统计信息区
前五行是系统整体的统计信息。
第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:
01:06:48 当前时间
up 1:22 系统运行时间,格式为时:分
1 user 当前登录用户数
load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。
三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
何为系统负载呢?
系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数。如果一个进程满足以下条件则其就会位于运行队列中:
- 它没有在等待I/O操作的结果
- 它没有主动进入等待状态(也就是没有调用’wait’)
- 没有被停止(例如:等待终止)
一般来说,每个CPU内核当前活动进程数不大于3,则系统运行表现良好!当然这里说的是每个cpu内核,也就是如果你的主机是四核cpu的话,那么只要uptime最后输出的一串字符数值小于12即表示系统负载不是很严重.当然如果达到20,那就表示当前系统负载非常严重,估计打开执行web脚本非常缓慢
第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:
Tasks: 29 total 进程总数
1 running 正在运行的进程数
28 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
Cpu(s): 0.3% us 用户空间占用CPU百分比
1.0% sy 内核空间占用CPU百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
98.7% id 空闲CPU百分比
0.0% wa 等待输入输出的CPU时间百分比
0.0% hi
0.0% si
最后两行为内存信息。内容如下:
Mem: 191272k total 物理内存总量
173656k used 使用的物理内存总量
17616k free 空闲内存总量
22052k buffers 用作内核缓存的内存量
Swap: 192772k total 交换区总量
0k used 使用的交换区总量
192772k free 空闲交换区总量
123988k cached 缓冲的交换区总量。
内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,
该数值即为这些内容已存在于内存中的交换区的大小。
相应的内存再次被换出时可不必再对交换区写入。
详细参考这篇文章:Linux top命令的用法详细详解。关于top工具的更多拓展可以参考我的这篇文章:还在用top工具吗
二、CPU相关:vmstat
vmstat -n 2 3
第一个参数是采样的时间间隔数(单位:秒),第二个参数是采样的次数
主要参数:
procs
- r: 运行和等待CPU时间片的进程数,原则上1核的CPU的运行队列不要超过2,整个系统的运行队列不能超过总核数的2倍,否则代表系统压力过大。
- b: 等待资源的进程数,比如正在等待磁盘I/O,网络I/O等。
cpu
-
us: 用户进程消耗CPU时间百分比,us值高,用户进程消耗CPU时间多,如果长期大于50%,需要优化程序
-
sy: 内核进程消耗的CPU时间百分比
us + sy 参考值为80%,如果us + sy 大于80%,说明可能存在CPU不足 -
id: 处于空闲CPU百分比
-
wa: 系统等待IO的CPU时间百分比
-
st: 来自于一个虚拟机偷取的CPU时间的百分比
2)mpstat
mpstat -P ALL 2
查看CPU核信息
3)pidstat
pidstat -u 1 -p 进程号
每个进程使用cpu的用量分解信息
三、内存:free
free -g
应用程序中可用内存 / 系统物理内存>70%:内存充足
应用程序可用内存/系统物理内存<20% 内存不足:需要增加内存
20%<应用程序可用内存/系统物理内存<70%: 内存基本够用
pidstat -r 采样间隔秒数 -p 进程号
四、硬盘:df
df
查看磁盘剩余空闲数
五、磁盘IO:iostat
硬盘IO相关
iostat -xdk 2 3
await :请求的平均等待时间,单位毫秒;值越小,性能越好。
util:一秒钟有百分之几的时间用于IO操作。接近百分之百的时候,表示磁盘宽带跑满,需要优化程序或者增加磁盘。
pidstat -d 采样间隔秒数 -p 进程号
六、网络IO:ifstat
ifstat
需要下载这个工具
七、分析生产环境CPU占用过高
步骤1
先用top命令找出CPU占比最高的;
步骤2
ps -ef 或者 jps 进一步定位,得知是一个怎样的后台程序,得知进程号
步骤3
定位到具体线程或者代码
ps -mp 进程 -o THREAD,tid,time
-o:该参数是用户自定义格式
-p:pid进程使用cpu的时间
-m: 显示所有线程
步骤4
将需要的线程ID转换为16进制格式(英文小写格式)
再使用:printf “%x/\n” 有问题的线程ID
步骤5:
jstat 进程ID | grep tid(16进制线程ID小写英文)
jstack 进程ID | grep tid(16进制线程ID小写英文)
定位到错误的代码行数
标签:百分比,java,变慢,top,考点,内存,进程,CPU 来源: https://blog.csdn.net/qq_44159782/article/details/117355688