ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-05-28 19:34:00  阅读:246  来源: 互联网

标签:百分比 java 变慢 top 考点 内存 进程 CPU


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

  • 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核信息
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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有