Linux服务器出现异常和卡顿排查思路和步骤

目录

  • 前言
  • 一、查看内存使用情况
  • 二、查看磁盘使用情况
  • 三、top命令
    • 3.1 jmap分析堆内存配置信息和使用情况
    • 3.2 jstack分析线程的执行情况
    • 3.3 jstat查看各个区域占堆百分比
  • 四、其他指令
  • 总结


前言

Linux 服务器出现异常和卡顿的原因有很多,以下是一些常见的原因:
1、CPU 占用率过高:当 CPU 占用率过高时,系统的响应速度会变慢,甚至出现卡顿现象。常见的原因包括进程的死循环、CPU 密集型的任务等。

2、内存使用过高:当内存使用过高时,系统会使用交换分区(swap),这会导致系统的响应速度变慢,甚至出现卡顿现象。常见的原因包括内存泄漏、进程使用过多的内存等。

3、网络带宽不足:当网络带宽不足时,网络传输速度会变慢,甚至出现卡顿现象。常见的原因包括网络拥塞、网络带宽不足等。

4、硬盘 I/O 过高:当硬盘 I/O 过高时,系统的响应速度会变慢,甚至出现卡顿现象。常见的原因包括硬盘读写速度慢、文件系统损坏等。

5、进程数过多:当系统中运行的进程数过多时,会导致系统资源的竞争,从而导致系统的响应速度变慢,甚至出现卡顿现象。

6、系统配置不当:当系统配置不当时,也会导致系统出现异常和卡顿现象。常见的原因包括系统内核参数设置不当、硬件配置不足、网络配置不当等。

针对这些问题,可以通过一些常见的命令进行分析和调优,如 top、ps等,从而找出问题的根源并进行针对性的优化。


一、查看内存使用情况

显示系统内存的使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存
free -h
在这里插入图片描述
持续观察内存使用情况,3s输出一次
free -h -s 3

主要关注free剩余的内存空间即可。

jar包大小和占用服务器运行内存之间没有直接的关系,即使java -jar指定了堆内存大小free -h也不会直接体现。
服务器运行内存是指Java程序在服务器运行时占用的内存大小。
Java程序运行时,JVM会将jar包中的类和资源加载到内存中,jar包大小可能会影响程序启动时间和内存使用情况。

二、查看磁盘使用情况

当存放日志、jar包文件、数据库备份文件过多也会导致系统性能下降,系统崩溃

df -h

在这里插入图片描述
看根目录的使用情况。

三、top命令

一言不合就top,常用参数

  • top -p 8080,8081 单独监控进程ID的状态
  • top -c 显示完整的命令行

不加参数也可以进入top后使用内部命令:

1 – ★数字1 按数字“1”可监控每个逻辑CPU的状况
f/F – ★添加或删除top中的显示字段
K – ★终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
u – ★搜索某一用户得进程 
n – ★设置在进程列表所显示进程的数量
s – ★改变画面更新周期,单位时秒
P – ★排序【%cpu】以 CPU 占用率大小的顺序排列进程列表
c – ★切换显示命令名称和完整命令行。
o或者O:改变显示项目的顺序
l – 关闭或开启第一部分第一行 切换显示平均负载和启动时间信息。
t – 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示切换显示进程和CPU状态信息。
m – 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示切换显示内存信息。
N – 排序【PID】以PID的大小的顺序排列表示进程列表
M – 排序【内存占用率】以大小的顺序排列进程列表
T – 排序【根据时间/累计时间进行】
i:忽略闲置和僵死进程。这是一个开关式命令。
S:切换到累计模式。
h – 显示帮助
q – 退出 top
W:将当前设置写入~/.toprc文件中。
b – 打开/关闭运行线程【R状态】的加亮效果
x – 打开/关闭运行线程【R状态】排序列的加亮效果
”shift + >”或”shift + < :★可以向右或左改变排序列

在这里插入图片描述
从top命令返回的数据中可以得到(按行)

  1. 系统时间-开机时长-登录人数-平均负载(1、5、15分钟内的负载,当此值超过CPU的数量就表示系统负载比较高了,可以通过停止或者优化占cpu资源的进程,或者增加硬件如cpu、内存、磁盘等)
  2. 总进程数-运行-休眠-停止-僵尸进程
  3. us:用户空间占用CPU的百分比,即应用程序的CPU使用率。
    sy:内核空间占用CPU的百分比,即系统内核的CPU使用率。
    ni:NICE值较高的进程占用CPU的百分比。
    id:空闲CPU的百分比。
    wa:等待I/O操作完成的CPU时间百分比。
    hi:处理硬件中断的CPU时间百分比。
    si:处理软件中断的CPU时间百分比。
  4. 内存总量-使用中的内存-空闲内存-缓存的内存量
  5. 交换区总量-使用的交换区总量-空闲交换区总量-缓冲的交换区总量

系统内存和交换空间(swap)是相互关联的,当系统内存不足时,操作系统会将一些不常用的内存数据移动到交换空间中,以释放物理内存,从而保证系统的正常运行。因此,可以将交换空间看作是一种扩展内存的方式,用于帮助系统更好地管理内存资源。由此可以观察此值,如果不断变化时,就是系统内存不足了。

  1. PID:进程 ID,用于唯一标识一个进程。USER:进程所属的用户,PR:进程的优先级,数值越小优先级越高,NI:进程的 nice 值,数值越小优先级越高,VIRT:虚拟内存大小,单位为 KB(千字节),包括进程使用的代码段、数据段、堆栈段以及共享库等占用的内存大小,RES:驻留内存大小,单位为 KB(千字节),指进程当前驻留在内存中的物理内存大小,也就是进程实际占用的内存大小,SHR:共享内存大小,单位为 KB(千字节),指进程使用的共享内存大小。S:进程状态,包括运行(R)、睡眠(S)、停止(T)、僵尸(Z)等状态,%CPU:进程占用 CPU 的比例,表示进程在 CPU 时间片中占用的时间比例,%MEM:进程占用物理内存的比例,表示进程占用物理内存大小与总内存大小的比例,TIME+:进程占用 CPU 的时间,包括用户态和内核态的 CPU 时间,COMMAND:进程的命令行信息,表示进程所执行的命令及其参数。

相关命令

查看CPU核心数 cat /proc/cpuinfo|grep processor|wc -l

3.1 jmap分析堆内存配置信息和使用情况

jmap -heap 命令输出的信息主要分为两部分,一部分是 Heap Configuration,表示 Java 进程的堆内存配置信息;另一部分是 Heap Usage,表示 Java 进程的堆内存使用情况。

1、top命令找到占用内存(RES列)高的Java进程PID。
RES(Resident Set Size)是指进程当前驻留在内存中的物理内存大小,也就是进程实际占用的内存大小。RES 包括了进程代码段、数据段、堆栈段以及共享库等占用的内存大小。RES 的大小可以反映一个进程的内存占用情况,通常来说,一个进程的 RES 越大,就表示它占用的内存越多。

2、查看分析heap内存使用情况

jmap -heap PID

在这里插入图片描述

Heap Configuration 堆配置
-MinHeapFreeRatio:最小堆空闲比例。如果堆的空闲比例低于此值,则会尝试进行垃圾回收。
-MaxHeapFreeRatio:最大堆空闲比例。如果堆的空闲比例高于此值,则会尝试释放一些内存。
-MaxHeapSize:堆的最大大小。当堆的大小达到此值时,就不会再进行自动扩展。
-NewSize:新生代大小。
-MaxNewSize:新生代最大大小。
-OldSize:老年代大小。
-NewRatio:新生代和老年代的比例。例如,NewRatio=2 表示新生代和老年代的比例为 1:2。
-SurvivorRatio:Eden 区和 Survivor 区的比例。例如,SurvivorRatio=8 表示 Eden 区和 Survivor 区的比例为 8:1。
-MetaspaceSize:元空间大小。
-CompressedClassSpaceSize:压缩类空间大小。
-MaxMetaspaceSize:元空间最大大小。
-G1HeapRegionSize: G1 收集器的堆区域大小。
Heap Usage
-PS Young Generation:新生代内存使用情况。
-Eden Space:Eden 区内存使用情况。
-Survivor Space:Survivor 区内存使用情况。
-PS Old Generation:老年代内存使用情况。
对于 Heap Usage,我们可以看到各个区域的容量、已使用大小、空闲大小、使用占比等,这些信息可以帮助我们了解 Java 进程的内存使用情况,从而进行性能调优或故障排查。

3.2 jstack分析线程的执行情况

通过分析 jstack PID 命令输出的结果,可以了解 Java 进程中每个线程的执行情况,包括线程的状态、调用栈信息、锁信息和监视器信息等,从而快速定位线程相关的性能问题,如死锁、死循环、线程阻塞等问题。jstack 命令还可以用于分析线上问题,提供诊断线上问题的线索,帮助开发人员更快地定位问题并解决问题。

1、top命令找到占用CPU高的进程PID
2、jstack PID
在这里插入图片描述

会打印以下信息:

  1. Java 线程的状态信息,包括线程 ID、线程名称、线程状态等。
  2. Java 线程堆栈信息,包括每个线程的调用栈信息,即线程当前正在执行的方法及其所在的类、行号等信息。
  3. Java线程锁信息,包括每个线程持有的锁信息,以及等待获取锁的线程信息。
  4. Java线程的监视器信息,包括每个线程持有的监视器信息,以及等待获取监视器的线程信息等。

3.3 jstat查看各个区域占堆百分比

jstat -gcutil PID 5000

通过分析 jstat -gcutil PID 输出的结果,可以了解 Java 进程中不同区域的内存使用情况,以及 GC 操作的次数和时间,从而优化程序的内存使用和 GC 性能。
在这里插入图片描述
S0:表示 Survivor 区 0 的使用情况,即 Survivor 区 0 中已使用的比例。
S1:表示 Survivor 区 1 的使用情况,即 Survivor 区 1 中已使用的比例。
E:表示 Eden 区的使用情况,即 Eden 区中已使用的比例。
O:表示 Old 区的使用情况,即 Old 区中已使用的比例。
M:表示 Metaspace 区的使用情况,即 Metaspace 区中已使用的比例。
CCS:表示 Compressed Class Space 区的使用情况,即 Compressed Class Space 区中已使用的比例。
YGC:表示 Young GC 的次数,即 Young GC 已执行的次数。
YGCT:表示 Young GC 的总时间,即 Young GC 已执行的总时间。
FGC:表示 Full GC 的次数,即 Full GC 已执行的次数。
FGCT:表示 Full GC 的总时间,即 Full GC 已执行的总时间。
GCT:表示 GC 的总时间,即 GC 已执行的总时间。

四、其他指令

1、查看java进程内存占用

top -o %MEM -b -n 1 | grep java | awk '{print "PID: "$1" \t 虚拟内存: "$5" \t 物理内存: "$6" \t 共享内存: "$7" \t CPU使用率: "$9"% \t 内存使用率: "$10"%"}'

2、监控java线程数

ps -eLf | grep java | wc -l

3、查看占用端口

netstat -ntlp

4、列出所有进程信息(ps -aux 和 ps -ef 命令的主要区别在于输出信息的详细程度不同,前者输出的信息更加详细,后者输出的信息更加简略。)

ps -ef 和 ps -aux

总结

Linux服务器出现异常和卡顿有硬件和软件的原因,硬件没问题的情况可以通过top命令、jps命令、jmap分析堆内存配置信息和使用情况、jstack分析线程的执行情况、 jstat查看各区域占堆百分比和服务日志去排查问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/39674.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

熵、交叉熵和散度

熵 自信息 I(x) - log p(x) 对于分布为P(x)的随机变量X&#xff0c;自信息的数学期望 即熵H(X)定义为&#xff1a; 熵越高&#xff0c;随机变量信息越高&#xff0c;反之越少。不同概率分布对应熵如下&#xff1a;P p()熵10001/21/41/41/31/31/3 概率分布越均匀&#xff0…

【腾讯轻量应用服务器上部署kafka并通过flink读取kafka数据】

环境准备 经过1个月的摸索&#xff0c;最终选择在腾讯云上搭建一个学习环境。当时选择原因还是新用户有优惠(150左右3年)&#xff0c;但现在看1核2g的配置勉强够用&#xff0c;建议后续小伙伴选择时最好是2核4g配置。 由于是单节点安装&#xff0c;需要准备如下资源&#xff1…

【Twitter Storm系列】flume-ng+Kafka+Storm+HDFS 实时系统搭建

技术交流群&#xff1a;59701880 深圳广州hadoop好友会 微信公众号&#xff1a;后续博客的文档都会转到微信公众号中。 一直以来都想接触Storm实时计算这块的东西&#xff0c;最近在群里看到上海一哥们罗宝写的FlumeKafkaStorm的实时日志流系统的搭建文档&#xff0c;自己也跟…

学习笔记之信息量、熵、KL散度、交叉熵的一些介绍

文章目录 信息量熵KL散度&#xff08;相对熵&#xff09;交叉熵参考 信息量 以前我也一直只是知道信息量的计算公式&#xff0c;也有想过为什么会是这样&#xff0c;但是因为要学的东西太多了&#xff0c;就没怎么深究&#xff0c;直到看了“交叉熵”如何做损失函数&#xff1…

AI产品经理是如何理解机器学习的(附注释)

本期目的&#xff1a;回顾之前敲代码的日常&#xff0c;利用生活场景帮助AI产品经理认识机器学习及学习过程中常用算法和评价指标。 适用读者&#xff1a;AI/数据产品经理。 阅读重点&#xff1a;品&#xff0c;细品&#xff0c;结合班级故事再品。 最近看了很多关于机器学习…

卢伟冰称小米今年库存会回到更健康水位 将加大门店整合调整

雷递网 乐天 3月25日 小米集团&#xff08;股票代码为&#xff1a;1810&#xff09;今日发布财报&#xff0c;财报显示&#xff0c;小米集团2022年营收为2800亿元&#xff0c;较上年同期的3283亿元下降14.7%。小米2022年经调净利为85亿元。 小米2022年第四季度营收为660.47亿元…

小米年营收2800亿:经调整利润85亿 电动汽车业务投入31亿

雷递网 雷建平 3月24日 小米集团&#xff08;股票代码为&#xff1a;1810&#xff09;今日发布财报&#xff0c;财报显示&#xff0c;小米集团2022年营收为2800亿元&#xff0c;较上年同期的3283亿元下降14.7%。 2022年&#xff0c;小米集团的境外市场收入为1378亿元&#xff0…

什么是低代码开发平台(apaas)?低代码开发平台的价值有哪些

手码6500字&#xff0c;带你快速看懂&#xff1a;什么是低代码开发平台&#xff08;apaas&#xff09;&#xff0c;低代码有哪些价值&#xff0c;以及低代码平台的使用逻辑和心得。 一、什么是低代码开发平台&#xff08;apaas&#xff09;&#xff1f; 低代码开发平台是一种a…

详解如何在ChatGPT内构建一个Python解释器

这篇文章主要为大家详细介绍了如何在ChatGPT内构建一个Python解释器&#xff0c;文中的示例代码讲解详细&#xff0c;具有一定的学习价值&#xff0c;需要的可以参考一下 目录 引用&#xff1a;Art Kulakov 《How to Build a Python Interpreter Inside ChatGPT》 这个灵感来自…

如何画各种“图”?

我们在写文档过程中&#xff0c;多多少少都会画一些图来说明程序的功能&#xff0c;这篇文章就来说明一些常用的"图"怎么画。 1&#xff0c;画图工具 常用的有这么几种 Visio&#xff1a;这是很常用的&#xff0c;基本上的图都可以用这个来画。StarUML&#xff1a…

patreon cg人物插画作品合集分享

1、wlop大神作品4K-8K精选无水印图片http://theme.chengxuz.com/265.html 2、加拿大女画师sakimi chan作品1-98期插画http://theme.chengxuz.com/250.html 3、画师Mirco Cabbia插画作品合集欣赏http://theme.chengxuz.com/306.html 4、画师Sciamano240插画作品分享http://th…

如何画场景插画?场景插画的起稿、构图技巧!

如何画场景插画&#xff1f;绘画初学者如何构图&#xff1f;绘画初学者如何起稿&#xff1f;学习绘画难吗&#xff1f;怎样才能学好绘画&#xff1f;想必这些都是绘画初学者们经常在想的问题吧&#xff0c;就是不知道如何才能绘画好一个场景&#xff0c;不知道如何起稿也不知道…

手把手教你实现手绘风格图形

大家好&#xff0c;我是 漫步&#xff0c;今天分享一篇高难度的图形绘制文章。 Rough.js[1]是一个手绘风格的图形库&#xff0c;提供了一些基本图形的绘制能力&#xff0c;比如&#xff1a;虽然笔者是个糙汉子&#xff0c;但是对这种可爱的东西都没啥抵抗力&#xff0c;这个库的…

Python自动绘制UML类图、函数调用图(Call Graph)

文章目录 1. 引言2. 绘制UML类图2.1 安装graphviz2.2 安装pyreverse2.3 绘制UML类图 3. 绘制函数调用图3.1 安装graphviz3.2 安装pycallgraph3.3 使用示例第一种&#xff1a;从命令行调用第二种&#xff1a;从API调用 小结 1. 引言 在设计软件、分析代码时&#xff0c;我们常常…

房价预测2

学习&#xff1a; https://blog.csdn.net/u012063773/article/details/79349256 https://www.cnblogs.com/massquantity/p/8640991.html https://zhuanlan.zhihu.com/p/39429689 详解stacking过程 之前在房价预测1中对一些异常值进行了drop处理 后来在分割train和test的时候…

深圳二手房房价分析及预测

分析目标&#xff1a; 通过处理后的房价数据&#xff0c;筛选对房价有显著影响的特征变量。确定特征变量&#xff0c;建立深圳房价预测模型并对假设情景进行模拟 数据预处理 import pandas as pd import os file_path"D:\Python数据分析与挖掘实战\深圳二手房价分析\…

波士顿房价预测

目录 前言一、波士顿房价预测实战1-1、数据集介绍&数据集导入&分割数据集1-2、数据标准化1-3、构建网络1-4、K折交叉验证&取出所有的训练损失、训练平均绝对误差、验证损失、验证平均绝对误差1-5、计算平均mae&绘制验证mae分数&绘制验证loss分数1-6、找到最…

房价多特征预测

2019.11.18 首先非常感谢这位作者&#xff0c;写的很棒&#xff01;你们就不要看我的啦&#xff0c;看他的⬇️⬇️ 学习来自 https://blog.csdn.net/sinat_29957455/article/details/79255675 下面的内容为自己学习笔记: 学习Kaggle&#xff5e;ing 这次给出的特征有点儿多啊…

北京房价预测图说

前言 曾听人说过&#xff0c;中国经济是房地产市场&#xff0c;美国经济是股票市场。中国房地产市场超过400万亿&#xff0c;房地产总值是美国、欧盟、日本总和&#xff0c;但是股市才50万亿&#xff0c;不到美欧日的十分之一。可见房地产对于中国来说地位尤其明显&#xff01…

苹果App Store商店中国区如何改为美国区

苹果App Store商店中国区如何改为美国区 Hello大家好&#xff01;苹果外区id是每个苹果手机必不可少的啦&#xff01;不是国外有多好而是国内的大部分软件都有限制&#xff0c;一开始我百度了一下内容太乱太杂了真的都是“bullshit”,下面直接上教程。 第一首先要一个国内的苹…