Linux系统之运行状态分析及问题排查思路

〇、一件事儿

以下分析是站在Java工程师的角度来分析的。

一、CPU分析

分析CPU的繁忙程度,两个指标:系统负载和CPU利用率

1、系统负载分析

系统负载:在Linux系统中表示,一段时间内正在执行进程数和CPU运行队列中就绪等待进程数,以及非常重要的休眠但不可中断的进程数的平均值(具体load值的计算方式,有兴趣可以自行深究,这里不深究)。说白了就是,系统负载与R(Linux系统之进程状态)和D(Linux系统之进程状态)状态的进程有关,这两个状态的进程越多,负载越高。

查看系统负载,见top命令:第1部分。

  1. 怎么看load average的值?
    通常先看15分钟的load值,如果load很高,再看1分钟和5分钟的load值,查看是否有下降趋势。短时间内load值高,无须太担心;但是如果长时间内load值持续过高,那么就要赶紧看看发生了什么。
  2. 需要警惕的load average的值(以单核CPU为例):
    • load值持续大于0.7,必须开始找问题出在哪里,防止情况恶化;
    • load值持续大于1.0,解决问题已迫在眉睫;
    • load值持续大升高达到5.0,表示各种请求几乎得不到响应,机器几近崩溃;

      对于多核机器,则需要根据CPU个数来判断系统负载是否过高。如,若认为0.7算是单核机器负载的安全线的话,则四核机器的负载最好保持在3(4*0.7 = 2.8)以下。

2、CPU利用率分析

  1. 看CPU的空闲率,用户进程CPU使用率和系统进程CPU使用率。
  2. 看个别进程的CPU利用率是否明显高于其他进程:
    • 死循环?
    • 复杂计算?
    • 超大对象耗时读写?

查看CPU利用率,见top命令:第3部分和第5部分。

3、综合两个分析

  1. CPU利用率高,系统负载低

    • 死循环?
    • 复杂计算?
    • 超大对象耗时读写?
  2. 系统负载高,CPU利用率低
    • 大量IO操作?
    • 大量死锁?
    • 大量执行耗时SQL?
    • 内存不足,频繁GC?
  3. 系统负载高,CPU利用率高
    • 大量进程出现死循环?
    • 大量进程进行复杂计算?
    • 大量进程对超大对象耗时读写?
    • 硬件无法支撑应用,升级机器?

三、内存分析

  1. 看总内存的使用情况;
  2. 是否有个别进程内存消耗明显高?
    • JVM内存设置是否合理?
    • 是否有大对象长时间未释放?

查看内存使用情况,见free命令top命令:第5部分。

四、I/O分析

  1. 如果avgqu-sz比较大,表示相当量的io在等待;
  2. 如果svctm比较接近await,说明I/O几乎没有等待时间;如果 await远大于svctm,说明I/O 队列太长,io响应太慢,则需要进行必要优化;
  3. 如果%util接近 100%(70%为安全线),说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈;
  4. 如果I/O存在瓶颈,可以用pidstat命令找到I/O读写高的进程;

查看I/O读写状况,见iostat命令

五、网络分析

netstat分析

  1. 分析连接状态

    • 若服务端出现了大量TIME_WAIT状态的连接,说明该服务器经常主动发起连接关闭操作,这是不可取的;
    • 若一个系统频繁出现CLOSE_WAIT状态的连接,说明该系统并未立即处理连接关闭请求,系统存在缺陷;
  2. 分析网络队列
    • 若Recv-Q过大,说明系统未能及时处理外部发来的请求;
    • 若Send-Q过大,说明系统发包速度过快以至于连接无法及时将数据发出,或者对端接收数据包慢

      这两个值通常应该为0,如果不为0可能是有问题的;数据包在两个队列里都不应该有堆积;可接受短暂的非0情况。

  3. 分析服务器端能否正常处理客户端连接
    如果Recv-Q队列大小值>=设置的somaxconn值(cat /proc/sys/net/core/somaxconn)说明服务器无法适应当前连接建立速度,不能及时accept新的连接。

    客户端在调用listen时,会传递backlog参数,该参数为“已建立连接但未被程序accept的连接队列的长度”,内核层会根据cat /proc/sys/net/core/somaxconn值与传入的backlog值,选择两者中的小值作为“已建立连接但未被服务器accept的连接队列长度”

tcpdump分析

tcpdump通过抓指定端口的数据包,可以分析指定进程的数据包流量。

通过抓包工具tcpdump及网络状态查看命令netstat可以帮助定位客户端、服务端相关网络问题,在日志匮乏或性能统计信息不足以分析服务器问题时,可以辅助分析服务器相关模块性能。

查看网络连接状况,见netstat命令tcpdump命令

六、排查思路

  1. 系统负载、CPU利用率、内存、I/O、网络等因素综合考虑,才是解决问题的关键。
  2. 先整体分析哪块问题,再定位特征进程(例如CPU利用率明显高于其他进程的进程),进而结合jstack定位到线程和代码。

原文地址:https://www.cnblogs.com/littlecharacter/p/12154589.html

时间: 2024-10-07 06:17:29

Linux系统之运行状态分析及问题排查思路的相关文章

linux系统下运行java项目的脚本编写

本文主要讲linux系统下运行jar包,至于如何打包jar包,放到linux系统下可以参考其他的博客. 在linux系统下运行jar包的命令如下: 1.java -jar xxxxx.jar  // 当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 2.java -jar xxxxx.jar &   //当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行. 3.nohup Java -jar xxxxxx.jar &  //意思是不挂断运行命令,当账户退

Linux系统中的硬件问题如何排查?(5)

Linux系统中的硬件问题如何排查?(5) 2013-03-27 10:32 核子可乐译 51CTO.com 字号:T | T 在Linux系统中,对于硬件故障问题的排查可能是计算机管理领域最棘手的工作,即使是经验相当丰富的用户有时也会遇上自己搞不定的状况,本文分享一些实用的技巧与处理方法,希望有助于读者朋友理解.查明并最终搞定硬件难题. AD:2014WOT全球软件技术峰会北京站 课程视频发布 实例汇总 有了前面提到的知识基础,现在我们该处理一些实例,在操作中学习并理解.当前我怀疑自己的英伟达

Linux系统中的硬件问题如何排查?(3)

Linux系统中的硬件问题如何排查?(3) 2013-03-27 10:32 核子可乐译 51CTO.com 字号:T | T 在Linux系统中,对于硬件故障问题的排查可能是计算机管理领域最棘手的工作,即使是经验相当丰富的用户有时也会遇上自己搞不定的状况,本文分享一些实用的技巧与处理方法,希望有助于读者朋友理解.查明并最终搞定硬件难题. AD:2014WOT全球软件技术峰会北京站 课程视频发布 Dmesg命令 另外一些颇具价值的信息被保存在内核缓冲区日志当中,我们通常可以利用dmesg命令来调

Linux系统中的硬件问题如何排查?(2)

Linux系统中的硬件问题如何排查?(2) 2013-03-27 10:32 核子可乐译 51CTO.com 字号:T | T 在Linux系统中,对于硬件故障问题的排查可能是计算机管理领域最棘手的工作,即使是经验相当丰富的用户有时也会遇上自己搞不定的状况,本文分享一些实用的技巧与处理方法,希望有助于读者朋友理解.查明并最终搞定硬件难题. AD:2014WOT全球软件技术峰会北京站 课程视频发布 硬件分析 由于在追踪硬件问题.尝试加以解决方面存在数以百计的处理方案,因此在实际操作中感到迷茫或是淹

Linux系统中的硬件问题如何排查?(4)

Linux系统中的硬件问题如何排查?(4) 2013-03-27 10:32 核子可乐译 51CTO.com 字号:T | T 在Linux系统中,对于硬件故障问题的排查可能是计算机管理领域最棘手的工作,即使是经验相当丰富的用户有时也会遇上自己搞不定的状况,本文分享一些实用的技巧与处理方法,希望有助于读者朋友理解.查明并最终搞定硬件难题. AD:2014WOT全球软件技术峰会北京站 课程视频发布 Lspci命令 要想对所有接入的硬件组件及其对应驱动程序进行扫描,这里还有一种更简单的方法.系统命令

在Linux系统下运行微信Web开发者工具

微信Web开发者工具只有window版本和mac版本,如果想要在Linux系统下运行微信Web开发者工具,需要花费很大周折. 注:带 * 的步骤或文件为不确定是否管用的步骤或文件.本人系统为Linux Mint 18.1版本. 1.下载nwjs 下载nwjs的SDK. 2.将微信web开发者工具拷贝到nwjs 将在window系统下安装的微信web开发者工具文件夹中的package.nw.icon.ico.* 微信web开发者工具.exe拷贝到nwjs sdk解压后的文件夹内. * 解压 微信w

telint---切换当前正在运行的Linux系统的运行等级

telint命令用于切换当前正在运行的Linux系统的运行等级 Send control commands to the init daemon. --help Show this help --no-wall Don't send wall message before halt/power-off/reboot Commands: 0 Power-off the machine 6 Reboot the machine 2, 3, 4, 5 Start runlevelX.target un

Linux系统是否被植入木马的排查流程梳理

在日常繁琐的运维工作中,对linux服务器进行安全检查是一个非常重要的环节.今天,分享一下如何检查linux系统是否遭受了入侵? 一.是否入侵检查 1)检查系统日志 检查系统错误登陆日志,统计IP重试次数(last命令是查看系统登陆日志,比如系统被reboot或登陆情况) [[email protected] ~]# last 2)检查系统用户 查看是否有异常的系统用户 [[email protected] ~]# cat /etc/passwd   查看是否产生了新用户,UID和GID为0的用

linux系统的运行级别

Linux系统有7个运行级别(runlevel): 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆 运行级别2:多用户状态(没有NFS) 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式 运行级别4:系统未使用,保留 运行级别5:X11控制台,登陆后进入图形GUI模式 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动