Linux 性能排查实战

发布时间:2026/10/26 19:54:31

Linux 性能排查实战 在日常运维中机器很卡是最常见也最模糊的问题描述。卡顿可能来自 CPU、内存、磁盘 IO、网络中的任何一个环节也可能是特定场景下的局部问题。本文从系统整体卡顿、打字延迟、内存泄漏三个层面给出一套可执行的排查方法论。目录一、系统卡顿排查框架1.1 一键快速定位1.2 分维度排查命令1.3 判断逻辑1.4 最常用的三板斧二、打字卡顿专项排查2.1 SSH 远程打字卡网络延迟或丢包SSH 服务端 DNS 反向解析MTU 不匹配2.2 本地终端打字卡终端模拟器资源消耗高桌面合成器卡顿输入法进程卡死Shell 配置过重终端大量输出滚动2.3 编辑器中打字卡2.4 快速定位法三、内存泄漏诊断3.1 什么是内存泄漏3.2 为什么要关注内存泄漏3.3 常见内存泄漏场景手动内存管理语言C/C缓存或集合只进不出资源句柄未关闭监听器和回调未注销长生命周期对象持有短生命周期引用第三方库缺陷运维侧的类泄漏3.4 排查方法四、总结一、系统卡顿排查框架系统卡顿的本质是资源瓶颈。Linux 系统的核心资源有四类CPU、内存、磁盘 IO、网络加上一个综合指标负载load average。排查时先定位是哪个维度的问题再深入分析。1.1 一键快速定位在排查初期用一条命令获取全局概览uptime echo --- top -bn1 | head -20 echo --- free -h echo --- vmstat 1 3这条命令依次输出系统负载、CPU 和进程概览、内存使用、虚拟内存统计。基本能在 10 秒内判断出卡顿方向。1.2 分维度排查命令维度命令关注指标整体负载uptimeload average 与 CPU 核数对比超过核数即为过载CPU 占用top按 P 排序%us 用户态、%sy 内核态、%wa IO 等待CPU 核明细mpstat -P ALL 1是否单核打满、是否有软中断%soft进程 CPUpidstat -u 1哪个进程持续消耗 CPU内存free -havailable 是否耗尽、swap 是否在用内存进程top按 M 排序哪个进程占内存最多换页vmstat 1si/so 持续非零说明在频繁 swap磁盘 IOiostat -xz 1%util 接近 100%、await 高说明磁盘瓶颈IO 进程iotop 或 pidstat -d 1哪个进程在大量读写网络流量iftop 或 nethogs是否被打满带宽、哪个进程占流量网络错误sar -n DEV 1rxerr/rxdrop 是否持续增长异常进程ps aux \awk $8 ~ /D\系统日志dmesg -T \tail -501.3 判断逻辑根据 top 输出中的 CPU 状态可以快速定位瓶颈类型• load 高 %us 高计算密集型进程用 top 找 CPU 占用最高的进程• load 高 %wa 高磁盘 IO 瓶颈用 iostat 和 iotop 定位• load 高 %sy/%soft 高内核或网络软中断开销大检查网络包量和内核参数• available 内存低 swap 活跃内存不足检查是否有内存泄漏或进程占用过高• %util 100% await 高磁盘性能不足或有坏道检查 dmesg 中的 IO 错误1.4 最常用的三板斧如果时间有限先执行这三条# 1. 谁在吃 CPU top -bn1 | head -15 # 2. 谁在吃内存 ps aux --sort-%mem | head -10 # 3. 是不是 IO 瓶颈 iostat -xz 1 3二、打字卡顿专项排查打字卡是一个比系统卡更具体的问题通常不是全局资源问题而是特定链路的延迟。需要区分场景来排查。2.1 SSH 远程打字卡这是最常见的场景表现为按键后字符延迟出现或者一串字突然一起蹦出来。常见原因和解决方法网络延迟或丢包用 ping 测试到服务器的网络质量如果延迟高或有丢包问题在网络层。弱网环境下可以用 mosh 替代 SSHmosh 基于 UDP 且支持本地回显体验远好于 SSH。ping -c 20 服务器IPSSH 服务端 DNS 反向解析SSH 默认会对连接 IP 做反向 DNS 解析如果 DNS 配置有问题每次操作都会卡顿。禁用即可sudo sed -i s/^#*UseDNS.*/UseDNS no/ /etc/ssh/sshd_config sudo sed -i s/^#*GSSAPIAuthentication.*/GSSAPIAuthentication no/ /etc/ssh/sshd_config sudo systemctl restart sshdMTU 不匹配如果大包卡顿但小包正常可能是 MTU 问题。用以下命令测试ping -M do -s 1472 网关IP不通则说明 MTU 需要调小或者在网关上配置 TCP MSS clamping。2.2 本地终端打字卡如果是在物理机或虚拟机的桌面环境中打字卡原因通常在终端模拟器或桌面环境层面。终端模拟器资源消耗高gnome-terminal、konsole 等终端在某些情况下会占用大量 CPU。可以换用 alacritty 或 kitty它们基于 GPU 加速响应极快。桌面合成器卡顿KDE 的 KWin 合成器、GNOME 的动画效果可能导致输入延迟。尝试关闭合成器或禁用桌面动画。输入法进程卡死ibus 或 fcitx 输入法进程异常会导致输入卡顿。重启输入法ibus restart # 或 fcitx5 -rShell 配置过重如果每次回车都卡一下可能是 shell 配置文件中有慢命令比如 git 状态查询、复杂的 prompt 渲染。用裸 shell 对比测试bash --norc --noprofile如果裸 shell 流畅就需要精简 .bashrc 或 .zshrc移除耗时插件或者使用异步 prompt 方案如 powerlevel10k。终端大量输出滚动如果有进程在疯狂打印日志终端渲染会成为瓶颈。用 CtrlS 暂停输出CtrlQ 恢复或者将输出重定向到文件。2.3 编辑器中打字卡只有在 vim 等编辑器中卡顿通常是编辑器本身的问题• 插件过多或语法高亮在大文件下性能差用 vim --noplugin 启动对比• 文件过大用 less 查看而非编辑或用 vim -u NONE 裸启动• 代码折叠导致卡顿执行 :set nofoldenable 关闭折叠• 交换文件写入慢检查磁盘 IO 是否正常2.4 快速定位法按以下顺序测试30 秒内可以定位问题层级# 1. 系统是否整体卡 uptime top -bn1 | head -5 # 2. 排除 shell 配置问题 bash --norc --noprofile # 3. 物理机切到 tty 测试CtrlAltF3排除图形环境影响 # 4. SSH 场景测试网络 ping -c 10 服务器IP判断逻辑• tty 里也卡系统负载或硬件问题• tty 流畅但图形终端卡终端模拟器、合成器或输入法问题• 本地流畅但 SSH 卡网络或 SSH 配置问题• 只有某个编辑器卡编辑器配置或大文件问题三、内存泄漏诊断内存泄漏是导致系统逐渐变慢、最终崩溃的常见原因。它的特点是渐进式的容易被忽视。3.1 什么是内存泄漏内存泄漏的本质是程序申请了内存但用完没有释放导致可用内存随时间持续减少。需要区分内存占用高和内存泄漏一个正常程序内存占用高但稳定是没问题的一个泄漏程序哪怕每次只漏 1MB长时间运行后也会耗尽所有内存。3.2 为什么要关注内存泄漏内存泄漏的危害是渐进的1. 初期几乎无感内存占用缓慢上升2. 中期可用内存不足开始频繁使用 swap系统明显变卡3. 后期 OOM Killer 随机杀掉进程服务崩溃4. 极端情况下系统卡死只能重启因此在排查系统卡顿和服务不稳定时内存使用趋势是必查项。3.3 常见内存泄漏场景手动内存管理语言C/Cmalloc/new 之后没有对应的 free/delete或者函数提前返回、抛出异常时跳过了释放逻辑。void bad_example() { char *p malloc(1024); if (error) return; // 直接返回p 没有释放 free(p); }缓存或集合只进不出这是所有语言中最常见的泄漏类型。HashMap、List、全局缓存无限追加数据但没有淘汰策略或清理机制。日志队列、任务队列的消费者跟不上生产者速度也属于此类。// 典型泄漏每个请求都 put但从不 remove static MapString, Object cache new HashMap(); cache.put(requestId, data);资源句柄未关闭文件描述符、数据库连接、Redis 连接、Socket 没有正确关闭这类泄漏最终会表现为 Too many open files 错误。线程创建后未退出也属于此类。监听器和回调未注销注册了事件监听器但对象销毁时没有反注册定时器没有 cancel。常见于 GUI 程序、Android 开发、前端组件销毁场景。长生命周期对象持有短生命周期引用Java 中静态集合持有 Activity 或 Request 对象导致整个对象图无法被 GC 回收。Python 中循环引用且定义了 __del__ 方法引用计数无法回收。闭包捕获了大对象且闭包被长期持有也会导致泄漏。第三方库缺陷驱动、JNI 库、native 扩展可能存在内存泄漏。某些版本的框架如 Netty、Tomcat 的特定版本也有已知的内存泄漏问题。运维侧的类泄漏日志文件只写不轮转导致磁盘占满、Docker 容器的 json-file 日志无限增长、/tmp 临时文件不清理。这些不是严格意义上的内存泄漏但现象和危害类似。3.4 排查方法判断是否存在内存泄漏核心是观察内存使用趋势# 观察特定进程的内存趋势每 2 秒采样 pidstat -r -p PID 2 # 或者用 watch 监控 RSS watch -n 5 ps -o pid,rss,vsz,comm -p PID # 系统整体内存趋势 free -h sar -r 1 10判断标准在没有新任务涌入的情况下进程的 RSS实际物理内存持续单调上升且不回落基本可以确定存在内存泄漏。正常程序在 GC 或空闲后内存会趋于平稳或下降。不同语言有更专业的排查工具• Javajmap 导出堆转储用 MAT 或 JVisualVM 分析• Gopprof 分析内存分配• C/Cvalgrind、AddressSanitizer• Pythontracemalloc、objgraph四、总结Linux 性能排查的核心思路是先全局后局部先资源后进程。系统卡顿用五维度模型快速定位打字卡顿按场景分层排查内存泄漏看趋势而非绝对值。掌握这套方法论后面对机器很卡这类模糊问题时就可以有条理地逐步缩小范围最终找到根因。排查工具只是手段理解各资源之间的关联和系统的运行机制才是关键。
延伸阅读

更多相关文章

2026/10/25 5:47:47

Codex auth.json 是什么:位置、风险与安全排错

引言:被误解的 auth.json 在 OpenAI Codex 的日常使用中,auth.json 文件常常被开发者从网上搜索、复制粘贴,当作一个普通的“配置文件模板”来使用。这是一个极其危险且普遍存在的误解。本文将深入解析 auth.json 的本质、正确的管理方式以及…

2026/10/26 7:34:51

嵌入式串口调试神器 JCom 详解|自定义协议组包+实时曲线解析

1. 前言 在嵌入式、单片机日常开发中,串口调试是最基础也是最高频的操作。 目前开发者常用的 SSCOM、串口调试助手等工具,仅支持基础的 HEX/ASCII 收发、定时发送功能。 一旦遇到自定义二进制协议、自动CRC校验、传感器ADC数据可视化、丢包检测等场景&am…

2026/10/25 11:18:51

Dynadot全球域名行业全景观察(2026.06)

关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…

2026/10/26 19:50:47

Java图书馆系统:MVC+Swing+MySQL课设实战指南

简介:本资源是一份面向Java初学者与课程设计实践者的完整图书馆书库管理系统开发资料,聚焦于MVC架构下的Web应用开发全流程,解决图书录入、借阅管理、用户权限控制及数据统计等核心业务问题。压缩包共80个文件,含16个核心Java源码…

2026/10/26 19:50:47

大模型三大落地能力:可控生成、跨模态协同与实时响应

1. 标题背后的现实语境:为什么“GPT-6 Luna”并不存在,但这个标题值得深挖你点开这个标题时,大概率是被“GPT-6”和“Luna”两个词同时击中了——前者暗示着超越当前主流大模型的代际跃迁,后者带着航天级的科技感与命名仪式感。但…

2026/10/26 19:50:47

解决Windows安卓模拟器aehd.sys驱动安装错误127

1. 问题现象与背景解析 当你在Windows系统上运行安卓虚拟机(如BlueStacks、NoxPlayer等)时,可能会遇到一个典型的驱动安装错误:"aehd无法安装:[SC] StartService 失败 127:找不到指定的程序"。这个报错通常发…

2026/10/26 19:50:47

Docker部署guacd与Guacamole无客户端远程桌面实践

远程办公和混合办公铺开之后,经常有人问我同一个问题:内网那几台机器的桌面,怎么让外面的人用浏览器直接打开,还不用在每台电脑上装客户端。我的答案通常只有一个——用 Docker 把 guacd 跑起来,前面挂一层 Guacamole 的 Web 端。guacd 是整个无客户端远程桌面方案里的"协…

2026/10/26 19:50:47

麒麟服务器操作系统 dhcpd 配置与多网段运维实战

1. 先把话说清楚:这台DHCP服务器到底要顶什么用自建DHCP这事,很多人第一反应是“交换机上开一个不就完了”。真到机房落地的时候,你很快会发现三层交换机那点DHCP功能不够用:地址池没法按终端类型分组、静态绑定改一次要进设备命令…

2026/10/26 19:45:44

SpaTime:面向动态场景理解的时空联合建模框架

1. 项目概述:这不是又一个“多模态大模型”,而是一次对“时间空间”理解能力的硬核重构SpaTime 这个名字乍看像某家水疗中心的英文名,但拆开来看——Spa代表Spatial(空间),Time代表Temporal(时间…

2026/10/26 0:20:20

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/26 1:53:47

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/26 0:20:17

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/26 0:00:48

Nested Learning:解决AI灾难性遗忘的分层记忆架构

1. 为什么AI需要"记忆"能力?在传统深度学习模型中,我们常遇到一个根本性问题:模型在处理新任务时,往往会完全遗忘之前学到的知识。这种现象被业界称为"灾难性遗忘"(Catastrophic Forgetting)。想象一下&#…

2026/10/26 0:00:48

企业级大模型应用:OCR预处理、Dify编排与DeepSeek落地实战

1. 这不是“用大模型”,而是重构工作流的起点“大模型的应用和工具”——这八个字现在被贴在无数技术分享、招聘JD、内部立项书的标题栏里,但绝大多数人点进去后看到的,是零散的API调用示例、几个开源UI截图、或者一句“接入LLM就能降本增效”…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑