3 个诊断 Linux 服务器的脚本

大家好!我是大聪明-PLUS

我相信很多人都经历过服务器速度变慢和页面加载缓慢的情况。日志里没有记录任何信息,所以我们需要找到罪魁祸首。系统监控显示,CPU 没有过载,内存没有完全利用,系统响应也不太理想。

在这种情况下,标准实用程序top通常htop显得力不从心;需要更详细的分析。我经常遇到这个问题,因此我编写了三个 Bash 脚本。它们收集关键的系统指标以供进一步分析。

搜索内存异常

第一个脚本不仅仅是简单的显示free -m。它的目的是查找行为可疑的进程:过快消耗内存、不必要地占用内存,或者在 I/O 子系统上造成过大的负载。

memory_analysis.sh

它的工作原理和需要注意的事项:

  • 第 1 点和第 2 点为我们提供了一个共同的起点。重要的是,不要只关注used,而要关注availablefree + buffers/cache。如果available内存不足,系统就会开始主动使用交换分区。

  • 第 3 点通常比较典型。但此处排序是专门按驻留内存进行的。该列RSS显示进程实际占用的物理 RAM 大小。某个进程的 RSS 值急剧增加是一个明显的信号。

  • 第 4 点是更深入的诊断。如果某个进程中积累了大量此类内存,可能表明该进程正在生成大量数据,并且无法快速刷新,从而给磁盘子系统带来压力。如果此指标持续较高,则需要检查脏页刷新设置(/proc/sys/vm/dirty_ratiodirty_background_ratio)。

  • 第 5 项(压力失速信息)是一项现代且高度准确的指标。它显示了由于内存不足而导致进程被迫空闲的程度。如果此值full增加,则清楚地表明内存不足,从而影响了性能。

深度磁盘 I/O 分析

第二个脚本的目的不仅是查找大文件,而且具体查找那些当前正在磁盘子系统上创建主要负载的进程。

io_analyzer.sh

它的工作原理和需要注意的事项:

  • 项目 1 ( iostat)。关键列:(%util设备利用率接近 100% 表示磁盘是瓶颈)、await(平均 I/O 操作延迟,单位:毫秒)。过高await%util磁盘过载的明显迹象。

  • 第 3 项 ( pidstat -dl) 显示每个进程每秒读取和写入磁盘的千字节数。这可以让你立即识别出最活跃的罪魁祸首。

  • 第 4 点可能更多是关于"静默"问题。一个进程打开了数千个文件描述符并且没有关闭它们,最终可能会耗尽系统的限制 ( ulimit -n),从而导致该进程和其他进程出现错误。

  • 第 5 点。有时,某个进程(通常是 DBMS 或缓存守护进程)可能会打开一个大型文件进行读写操作。此循环可以检测到此类进程,并显示其正在访问哪个文件。这通常表示日志配置不正确,或者临时文件的大小已达到数 GB。

网络异常检测器

第三个脚本专注于网络活动。它有助于查找建立可疑大量连接的进程或检测意外的高网络流量。

network_analysis.sh

它的工作原理和需要注意的事项:

  • 第 2 项显示了 TCP 连接的状态分布。大量处于该状态的连接TIME_WAIT可能CLOSE_WAIT表明应用程序的网络堆栈存在问题,或者无法正确关闭连接。

  • 要点 3. 单个进程(例如,Web 服务器或数据库)的连接数异常高可能是正常现象,也可能表示存在 DDoS 攻击、应用程序中的连接泄漏或机器人活动。

  • 第四点------安全性和意识。该脚本会查找监听不常见端口的服务(例如,SSH 的 22 端口或 HTTP 的 80 端口)。这有助于快速检测未经授权或被遗忘的服务。

  • 要点 5 - 诊断网络级问题。接口上错误 ( errors) 或丢包 ( )数量增加通常表明网络硬件存在问题,例如过载或配置错误。drops

使用其中一个 VPS 进行测试

由于缺少监听端口,第 4 点没有输出,并且脚本中的输出不包括标准端口(我的 SSH 连接)。

结论

这些脚本是快速诊断的绝佳入门工具包。它们能帮助您从困惑(从哪里开始......)中解脱出来,获得具体的数据:"进程 N 正在耗尽所有内存"或"进程 N 正在造成巨大的磁盘负载"。借助从脚本中获取的数据,您可以更轻松地找到原因。

相关推荐
Evan芙9 分钟前
Linux常见的日志服务管理的常见日志服务
linux·运维·服务器
hkhkhkhkh1232 小时前
Linux设备节点基础知识
linux·服务器·驱动开发
HZero.chen3 小时前
Linux字符串处理
linux·string
张童瑶3 小时前
Linux SSH隧道代理转发及多层转发
linux·运维·ssh
汪汪队立大功1233 小时前
什么是SELinux
linux
石小千3 小时前
Linux安装OpenProject
linux·运维
柏木乃一3 小时前
进程(2)进程概念与基本操作
linux·服务器·开发语言·性能优化·shell·进程
Lime-30903 小时前
制作Ubuntu 24.04-GPU服务器测试系统盘
linux·运维·ubuntu
百年渔翁_肯肯4 小时前
Linux 与 Unix 的核心区别(清晰对比版)
linux·运维·unix
胡闹544 小时前
Linux查询防火墙放过的端口并额外增加需要通过的端口命令
linux·运维·windows