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

这篇具有很好参考价值的文章主要介绍了Linux服务器出现异常和卡顿排查思路和步骤。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

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

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

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

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

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

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

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


一、查看内存使用情况

显示系统内存的使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存
free -h
Linux服务器出现异常和卡顿排查思路和步骤
持续观察内存使用情况,3s输出一次
free -h -s 3

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

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

二、查看磁盘使用情况

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

df -h

Linux服务器出现异常和卡顿排查思路和步骤
看根目录的使用情况。

三、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 + < :★可以向右或左改变排序列

Linux服务器出现异常和卡顿排查思路和步骤
从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

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

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
Linux服务器出现异常和卡顿排查思路和步骤

会打印以下信息:

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

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

jstat -gcutil PID 5000

通过分析 jstat -gcutil PID 输出的结果,可以了解 Java 进程中不同区域的内存使用情况,以及 GC 操作的次数和时间,从而优化程序的内存使用和 GC 性能。
Linux服务器出现异常和卡顿排查思路和步骤
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查看各区域占堆百分比和服务日志去排查问题。文章来源地址https://www.toymoban.com/news/detail-443745.html

到了这里,关于Linux服务器出现异常和卡顿排查思路和步骤的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 记一次MySQL从节点服务器宕机重启后,从节点出现主键冲突异常的处理

    MySQL 5.7 非GTID模式多线程复制。 某MySQL数据库从节点因故障宕机(因故障直接宕机,非正常关闭),重启之后发现复制状态异常,show slave的结果中Slave_SQL_Running为No,错误代码为1062 error code,从系统表performance_schema.replication_applier_status_by_worker以及error log中显示某条数据因为已

    2024年02月19日
    浏览(33)
  • Linux 清理磁盘空间&使用du指令排查服务器磁盘占用过大的文件

    命令:df -h 参数说明: -a:列出所有的文件系统,包括系统特有的/proc等文件系统 -k:以KB的容器显示各文件系统 -m:以MB的容量显示各文件系统 -h:以人们较易阅读的GB,MB,KB等格式自行显示 -H:以 M=1000K代替M=1024K的进位方式 -T:连同该分区的文件系统名称(例如ext3)也列出

    2024年02月06日
    浏览(40)
  • Azure VM 远程桌面服务异常排查思路(已更新Azure Portal方式)

    Windows 服务默认的远程桌面服务端口号是3389,在创建完Azure VM之后基本都会添加一个any to any的防火墙规则,方便多人登录这个机器。 但是随时随地的3389扫描搞得我很烦,就修改了默认的windows 远程桌面服务的端口号,修改完没有在VM里的windows 自带防火墙中添加inbound新端口规

    2024年02月15日
    浏览(22)
  • (六)关于Linux中服务器磁盘爆满问题的几个解决思路

    在监控服务器性能的时候,发现服务器的磁盘占用很大,几乎快要爆满,具体的表现可能如下: 1、应用服务访问卡顿甚至失败; 2、数据库访问失败; 3、文件上传失败 等等 通过命令 df -h 查看磁盘占用情况,发现如下: 这里的占用是清除过的,所以并不算特别高。 这种现

    2024年02月04日
    浏览(35)
  • linux 服务器出现 Input/output error 处理

    今天突然出现 ls、ss 、 lsof 等命令报错 -bash: /bin/ss: Input/output error 其中有一个服务器上出现提示 *** System restart required *** Last login: Thu Sep 15 12:02:09 2022 from 192.168.0.135 .ssh/rc: 12: .ssh/rc: cannot create /var/log/zabbix-agent/ssh.log: Read-only file system reboot 之后,OK 另一个服务器上更严重 $ sudo

    2024年02月06日
    浏览(37)
  • 【科普+技术】Linux服务器被占用大量资源,用三大网站排查ip地址和初步处理挖矿病毒

    五星红旗在bg飘扬——中国黑客的复仇 这里的“挖矿”只是个说法不是拿着锄头进矿洞,是指一段时间内在比特币系统中发生的交易进行确认,并记录在 区块链 上,形成新的区块,而挖矿的人叫作 矿工 。比特币系统的记账权利是去中心化的,即每个矿工都有记账的权利,只

    2023年04月15日
    浏览(38)
  • Linux服务器配置SSH免密码登录后,登录仍提示输入密码(一次真实的问题排查解决记录)

    我们知道两台Linux服务器机器之间如果使用ssh命令登录或scp/rsync命令传输文件每一次都需要输入用户名相对应的密码,如果要免密码,则需要对两台Linux服务器机器之间进行SSH互信。 虽然这是废话,也希望大家了解一下。 SSH(Secure Shell)是一种安全的传输协议,它可以让Lin

    2024年02月09日
    浏览(44)
  • 【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(排查问题指令 - 上)

    在线上排查问题时,查询日志、查看系统配置和分析操作系统信息是至关重要的。这些操作可以帮助我们深入了解软件和服务的兼容性,并解决潜在的问题。在本次学习中,我们将介绍并深入学习一些我在处理类似问题时常用的指令。通过掌握这些指令,你将能够更加高效地

    2024年01月16日
    浏览(37)
  • 服务器卡顿怎么查找原因?

    虽然服务器出现卡顿的现象比较少见,但也不排除出现的可能,而服务器一旦出现卡顿,造成的后果会严重的多。这里分享点笔记,希望有所帮助 1. 性能评估: 首先,对服务器的性能进行全面评估。检查 CPU 使用率、内存占用、磁盘读写速度等关键性能指标,确认是否存在明

    2024年02月11日
    浏览(36)
  • Linux服务器丢包故障的解决思路及引申的TCP/IP协议栈理论

    我们使用Linux作为服务器操作系统时,为了达到高并发处理能力,充分利用机器性能,经常会进行一些内核参数的调整优化,但不合理的调整常常也会引起意想不到的其他问题,本文就一次Linux服务器丢包故障的处理过程,结合Linux内核参数说明和TCP/IP协议栈相关的理论,介绍

    2024年02月11日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包