首页 智能穿戴

Linux常用指令进阶:性能监控与问题排查实战技巧

分类:智能穿戴
字数: (2719)
阅读: (0196)
内容摘要:Linux常用指令进阶:性能监控与问题排查实战技巧,

在服务器运维过程中,Linux 常用指令是我们排查问题、监控性能的重要工具。很多时候,线上应用出现卡顿,CPU 占用率飙升,内存溢出等问题,都需要通过一系列的 Linux 指令来定位瓶颈。例如,线上 Nginx 服务突然响应变慢,排查时我们可能会先使用 top 命令观察 CPU 和内存的使用情况,然后用 netstat 命令查看网络连接状态,再结合 lsof 命令找出占用资源的进程,最终定位到是某个接口的 SQL 查询导致了数据库压力过大。本文将深入探讨一些高级的 Linux 常用指令,以及它们在实际问题排查中的应用。

top:实时监控系统资源使用情况

top 命令提供了一个动态的实时视图,展示系统中各个进程的资源消耗情况,包括 CPU 使用率、内存占用、进程 ID 等。它对于快速识别高负载进程非常有用。

top  # 直接运行 top 命令

top 命令的输出中,需要关注以下几个关键指标:

  • CPU 使用率 (%CPU): 如果某个进程的 CPU 使用率长期处于较高水平,说明该进程可能存在性能问题。
  • 内存使用率 (%MEM): 关注内存占用过高的进程,可能是内存泄漏或内存使用不当。
  • Load Average: 系统平均负载,反映了系统整体的繁忙程度。如果 Load Average 持续高于 CPU 核心数,说明系统已经超负荷运行。

例如,如果发现一个 Java 进程的 CPU 使用率持续超过 80%,那么可以进一步使用 jstack 命令来分析该进程的线程堆栈,找出导致 CPU 飙升的具体代码。

Linux常用指令进阶:性能监控与问题排查实战技巧

vmstat:虚拟内存统计

vmstat 命令可以报告关于内核线程、虚拟内存、磁盘 I/O、陷阱和 CPU 活动的统计信息。它可以帮助我们了解系统的整体性能瓶颈。

vmstat 1 5  # 每 1 秒采样一次,共采样 5 次
  • r (Running): 等待运行的进程数。如果这个值长期大于 CPU 核心数,说明 CPU 资源紧张。
  • swpd (Swap Used): 使用的交换空间大小。如果交换空间被频繁使用,说明物理内存不足。
  • io (I/O Wait): 等待 I/O 操作完成的 CPU 时间百分比。如果这个值很高,说明磁盘 I/O 可能是瓶颈。

如果 vmstat 显示 swpd 值很高,表明系统正在频繁使用 Swap 空间,这时候可以考虑增加物理内存,或者优化程序的内存使用方式,比如使用对象池、减少大对象的创建等。同时,也可以结合 free -m 命令查看内存的详细使用情况。

iostat:磁盘 I/O 性能监控

iostat 命令用于监控磁盘 I/O 性能。它可以报告磁盘的读写速度、I/O 请求队列长度等信息,帮助我们找出磁盘 I/O 瓶颈。

Linux常用指令进阶:性能监控与问题排查实战技巧
iostat -xdk 1 5  # 每 1 秒采样一次,共采样 5 次,显示扩展信息和 KB 单位
  • %util (Utilization): 磁盘利用率,表示磁盘忙碌的时间百分比。如果这个值接近 100%,说明磁盘已经达到饱和状态。
  • await (Average Wait Time): 平均 I/O 等待时间,包括请求队列时间和实际 I/O 操作时间。如果这个值很高,说明磁盘 I/O 响应缓慢。
  • svctm (Service Time): 平均 I/O 服务时间,即实际 I/O 操作的时间。如果 svctm 远小于 await,说明大部分时间都花费在请求队列中。

如果 iostat 显示磁盘利用率很高,并且 I/O 等待时间也很长,那么可以考虑升级磁盘,或者优化程序的 I/O 操作方式,比如使用异步 I/O、减少磁盘写入次数等。对于数据库应用,还可以考虑使用 RAID 来提高磁盘 I/O 性能。

netstat 和 ss:网络连接状态分析

netstatss 命令用于查看网络连接状态。ss 命令是 netstat 的替代品,性能更好,功能更强大。

ss -ant  # 显示所有 TCP 连接的地址和端口信息
ss -s   # 显示网络统计信息汇总
  • ESTABLISHED: 已建立的连接数。
  • TIME_WAIT: 处于 TIME_WAIT 状态的连接数。大量的 TIME_WAIT 连接可能会占用系统资源,导致新的连接无法建立。可以通过调整 TCP 连接参数来减少 TIME_WAIT 的数量。
  • CLOSE_WAIT: 处于 CLOSE_WAIT 状态的连接数。大量的 CLOSE_WAIT 连接通常表示服务端没有正确关闭连接。

如果 ss 命令显示大量的 TIME_WAIT 连接,可以调整 /etc/sysctl.conf 文件中的 TCP 连接参数,比如 tcp_tw_reusetcp_tw_recycle,来加速 TIME_WAIT 连接的回收。但要注意,开启 tcp_tw_recycle 可能会带来安全问题,需要谨慎使用。另外,查看 Nginx 的并发连接数也可以使用 ngx_http_stub_status_module 模块。

Linux常用指令进阶:性能监控与问题排查实战技巧

lsof:查找打开的文件和进程

lsof 命令用于列出系统当前打开的文件。在 Linux 系统中,一切皆文件,网络连接、管道、设备等都可以看作是文件。lsof 命令可以帮助我们找出哪些进程占用了特定的文件或端口。

lsof -i:8080  # 列出占用 8080 端口的进程
lsof /path/to/file  # 列出打开指定文件的进程

例如,如果一个进程无法正常启动,提示端口被占用,可以使用 lsof -i:端口号 命令找出占用该端口的进程,然后 kill 掉该进程,再重新启动应用。对于线上 Redis 服务,如果怀疑有慢查询,也可以用 lsof 找到 Redis 的客户端连接文件,进而分析慢查询日志。

实战避坑:线上 CPU 占用率高排查

在一次线上事故中,我们发现一台服务器的 CPU 占用率持续超过 90%。首先,我们使用 top 命令找到了 CPU 使用率最高的 Java 进程。然后,我们使用 jstack 命令导出了该进程的线程堆栈信息。

Linux常用指令进阶:性能监控与问题排查实战技巧
jstack PID > dump.txt  # PID 为 Java 进程的 ID

接着,我们分析了 dump.txt 文件,发现大量的线程都阻塞在同一个 I/O 操作上。进一步分析代码,发现是由于使用了不合理的 I/O 缓冲大小,导致每次 I/O 操作都需要进行多次系统调用,从而增加了 CPU 的开销。

最后,我们调整了 I/O 缓冲大小,减少了系统调用的次数,CPU 占用率很快就降了下来。这次排查经历让我们深刻体会到,在优化性能时,不能只关注代码逻辑,还要深入了解底层原理,才能找到真正的瓶颈。

总结:熟练掌握 Linux 常用指令 是后端工程师必备的技能,能够帮助我们快速定位和解决线上问题。除了上述指令,还有很多其他的实用工具,比如 stracetcpdump 等,需要在实际工作中不断学习和积累。

Linux常用指令进阶:性能监控与问题排查实战技巧

转载请注明出处: CoderPunk

本文的链接地址: http://m.acea2.store/blog/425169.SHTML

本文最后 发布于2026-04-07 06:30:50,已经过了20天没有更新,若内容或图片 失效,请留言反馈

()
您可能对以下文章感兴趣
评论
  • 芒果布丁 5 天前
    lsof 在排查端口占用问题的时候简直是神器!