编程语言
首页 > 编程语言> > java常见面试考点(三十二):诊断生产环境服务器变慢

java常见面试考点(三十二):诊断生产环境服务器变慢

作者:互联网

java常见面试考点

往期文章推荐:
  java常见面试考点(二十七):java里的锁总结
  java常见面试考点(二十八):内部类详解
  java常见面试考点(二十九):进程和线程的区别
  java常见面试考点(三十):异常
  java常见面试考点(三十一):连接池的作用


【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权);

本博客的内容来自于:;

学习、合作与交流联系q384660495;

本博客的内容仅供学习与参考,并非营利;

文章目录


一、整机:top

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。下面详细介绍它的使用方法。
top
统计信息区
前五行是系统整体的统计信息。

第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:

01:06:48 当前时间
up 1:22 系统运行时间,格式为时:分
1 user 当前登录用户数
load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。
三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

何为系统负载呢?
系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数。如果一个进程满足以下条件则其就会位于运行队列中:

  1. 它没有在等待I/O操作的结果
  2. 它没有主动进入等待状态(也就是没有调用’wait’)
  3. 没有被停止(例如:等待终止)

一般来说,每个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

vmstat -n 2 3

第一个参数是采样的时间间隔数(单位:秒),第二个参数是采样的次数
主要参数:

procs

cpu

2)mpstat

mpstat -P ALL 2

查看CPU核信息
mpstat
3)pidstat

pidstat -u 1 -p 进程号

每个进程使用cpu的用量分解信息

三、内存:free

free -g

应用程序中可用内存 / 系统物理内存>70%:内存充足
应用程序可用内存/系统物理内存<20% 内存不足:需要增加内存
20%<应用程序可用内存/系统物理内存<70%: 内存基本够用

free

pidstat -r 采样间隔秒数 -p 进程号

四、硬盘:df

df

查看磁盘剩余空闲数
df

五、磁盘IO:iostat

硬盘IO相关

iostat -xdk 2 3

iostat
await :请求的平均等待时间,单位毫秒;值越小,性能越好。
util:一秒钟有百分之几的时间用于IO操作。接近百分之百的时候,表示磁盘宽带跑满,需要优化程序或者增加磁盘。

pidstat -d 采样间隔秒数 -p 进程号

pidstat

六、网络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