? ? ? ? Linux对于后端程序员来说并不陌生,但是结合生产环境服务器变慢的性能诊断和问题排查可能了解的就没那么多了,很多程序员的日常主要工作还是结合需求进行编码,至于Linux中如何排查服务器性能变慢可能就没那么了解了,下面结合自己的工作实践,为大家演示Linux中究竟如何排查?用到了哪些参数?带着这个疑问,开始下面的案例演示。如果帮助到了你,请点赞 + 关注 + 收藏 + 评论!
(1)整机:top(uptime,系统性能命令的精简版);
(2)CPU:
(1)将LinuxMainApp.java上传至 /applications目录并带包编译
javac -d .?LinuxMainApp.java
(2)带包运行
/**
* @Author : 一叶浮萍归大海
* @Date: 2023/12/22 14:39
* @Description: 该代码将上传至Linux的 /applications 目录,通过 运行该程序来演示Linux中如何排查服务器性能变慢
*/
public class LinuxMainApp {
public static void main(String[] args) {
while (true) {
System.out.println("欧耶,今天星期五!"+ new Random().nextInt(33334444));
}
}
}
概述:
? ? ? ? top命令用于查看整机的性能情况,如下所示:
????????
题外话:右上角标红的字段的意思是什么?
? ? ? ? load average俗称系统的负载均衡,这三个字段分别表示系统1分钟、5分钟、15分钟的平均负载值,如果三者的值相加,然后除以3,再乘以100%,结果大于60%,那么表明当前的系统压力比较大,需要开发介入。
uptime:
? ? ? ? 该指令为top指令的精简版,也可以查看当前系统的负载情况,用法如下:
????????
我的虚拟机配置:
????????
概述:
? ? ? ? vmstat指令用于查看CPU的信息(包括但是不限于),例如:
????????? ? ? ? ? ? ? ??
指令详解:
? ? ? ? 一般情况下vmstat指令需要配合2个数字参数进行使用,参数1为采样的时间间隔(单位:秒),参数2为采样的次数。
? ? ? ? procs:
? ? ? ? ? ? ? ? (1)r:运行和等待CPU时间片的进程数,原则上1核的CPU的运行队列不要超过2,我当前配置的是1(如上),整个系统的运行队列不能超过总核数的2倍,否则代表当前系统? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 压力过大;
? ? ? ? ? ? ? ? (2)b:等待资源的进程数,例如:正在等待磁盘I/O、网络I/O的进程数;
????????cpu:
? ? ? ? ? ? ? ? (1)us:用户进程消耗CPU时间的百分比,值越高代表用户进程消耗的CPU时间多,如果长期大于50%,需要开发优化程序;
? ? ? ? ? ? ? ? (2)sy:内核进程消耗CPU时间的百分比;
? ? ? ? ? ? ? ? (3)us + sy:参考值为80%,如果大于80%,说明可能CPU不足;
? ? ? ? id:????????????????
? ? ? ? ? ? ? ? 处于空闲的CPU百分比;
? ? ? ? wa:
? ? ? ? ? ? ? ? 系统等待I/O的CPU时间百分比;
额外:
? ? ? ? (1)查看所有的CPU核信息: mpstat -P ALL 2
????????
? ? ? ? (2)每个进程使用cpu的用量分解信息:
????????? ? ? ? 语法:pidstat -u 1 -p 进程编号
? ? ? ? ????????说明:此处的1是间隔的时间(单位:秒),可以自定义
????????? ? ? ??
概述:
? ? ? ? free指令用于查看应用程序可用的内存数,以下3个指令都可以查看,即:free(单位:字节)、free -g(单位:G)、free -m(单位:MB,最精确,推荐!)
????????
经验:
? ? ? ? (1)应用程序可用内存 / 系统物理内存 > 70%时,内存充足;
? ? ? ? (2)应用程序可用内存 / 系统物理内存 < 20%时,内存不足,需要增加内存;
? ? ? ? (3)20% <?应用程序可用内存 / 系统物理内存 < 70%时,内存基本够用;
内存额外:
? ? ? ? 语法:pidstat -p 进程号 -r 采样间隔秒数
????????
概述:
? ? ? ? df指令用于查看当前硬盘的使用情况,指令为:df、df -h(推荐)。
????????
概述:? ? ? ?
????????iostat指令用于查看当前系统的写入和写出信息,常用操作:iostat -xdk 2 3
????????
参数详解:
? ? ? ? (1)rkB/s:每秒读取数据量;
? ? ? ? (2)wkB/s:每秒写入数据量;
? ? ? ? (3)svctm:请求的平均响应时间(单位:毫秒);
? ? ? ? (4)await:请求的平均等待时间(单位:毫秒);
? ? ? ? (5)util:1s钟有百分之几的时间用于I/O操作,接近100%时,需要优化程序或者增加磁盘;
注意事项:
? ? ? ? (1)rkB/s、wkB/s 会根据系统应用的不同会有不同的值,但是规律不是不变的,遵循:长期、超大数据读写肯定不正常,此时需要优化程序读取;
? ? ? ? (2)svctm如果和await的值很接近,表示几乎没有I/O,意味着磁盘性能好;
? ? ? ? (3)如果await的值远大于svctm,则表明I/O队列等待太长,需要优化程序或者更换磁盘;? ? ? ? ? ? ? ??
额外:
? ? ? ? 语法:pidstat -d 采样间隔秒数 -p 进程号
????????
概述:
? ? ? ? ifstat命令用于查看当前网络I/O情况。