程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2023-06(4)

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

发布于2021-05-29 23:18     阅读(1119)     评论(0)     点赞(21)     收藏(5)


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

  • 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
定位到具体线程或者代码,找出该进程内最耗费 CPU 的线程,可以使用 ps -Lfp pid 或者 ps -mp pid -o THREAD, tid, time 或者 top -Hp pid

-o:该参数是用户自定义格式
-p:pid进程使用cpu的时间
-m: 显示所有线程
找到线程

步骤4
将需要的线程ID转换为16进制格式(英文小写格式)
再使用:printf “%x/\n” 有问题的线程ID
转格式

步骤5:

jstack 进程ID | grep tid(16进制线程ID小写英文)
定位到错误的代码行数



所属网站分类: 技术文章 > 博客

作者:怎么没有鱼儿上钩呢

链接:http://www.javaheidong.com/blog/article/207818/2db7440c901ae0844d4a/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

21 0
收藏该文
已收藏

评论内容:(最多支持255个字符)