Linux Context如何进行故障排查
小樊
40
2025-11-23 15:57:01
Linux Context故障排查指南
一 明确问题类型
- 含义一:SELinux 安全上下文(security context)
典型现象是访问被拒、服务启动失败、日志出现 “permission denied” 或 “AVC denied”,多与文件、进程、端口的 SELinux 标签或布尔值配置不当有关。
- 含义二:CPU 上下文切换(context switch)
典型现象是系统负载偏高、响应变慢,通过 vmstat 的 cs、in 或 pidstat -w 看到切换次数异常升高。
二 SELinux 安全上下文排查与修复
- 快速定位
- 查看服务或命令的拒绝日志:
- journalctl -xe(系统级日志)
- tail -f /var/log/audit/audit.log | grep AVC(若存在 auditd)
关注被拒绝的主体(进程/用户)、客体(文件/目录/端口)、操作与权限需求。
- 核对与修正标签
- 查看文件/目录上下文:
- 恢复默认上下文(基于策略):
- 按类型设置上下文(示例):
- chcon -t httpd_sys_content_t /var/www/html/index.html
- chcon -t httpd_sys_rw_content_t /var/www/html/upload(写权限示例)
- 策略与布尔值
- 查看/调整布尔值(示例):
- getsebool httpd_can_network_connect
- setsebool -P httpd_can_network_connect 1(永久生效)
- 验证
- 复现操作,确认 AVC 消失、访问恢复正常;必要时用 ausearch -m avc -ts recent 回溯最近拒绝事件。
三 CPU 上下文切换过高排查
- 全局观察
- 实时查看系统级指标:
- vmstat 1(关注 cs、in 列;若 cs 持续很高,说明切换频繁)
- 定位到进程
- 按进程查看自愿/非自愿切换:
- pidstat -w 1(关注 cswch/s 与 nvcswch/s;自愿切换多与 I/O 等待相关,非自愿多与 CPU 抢占/时间片相关)
- 累计值与趋势
- 查看系统累计上下文切换:
- grep ctxt /proc/stat(第一列为自开机起的累计 ctxt)
- 深入诊断
- 对可疑进程进行系统调用跟踪:
- strace -p -c(识别频繁阻塞/唤醒来源)
- 常见成因
- 时间片到期调度、I/O 阻塞、锁竞争/自旋、硬件中断风暴等。
四 通用日志与系统状态检查
- 日志聚合
- journalctl -xe、tail -f /var/log/syslog(Debian 系列)、dmesg(内核消息)
- 资源与服务
- top/htop(负载与占用)、ps aux(进程快照)、systemctl status (服务状态与最近日志)
- 变更与回滚
- 排查期间避免盲目变更,必要时先备份关键配置;若涉及系统更新/重装组件,先准备回滚方案。
五 最小化复现与修复建议
- SELinux
- 临时放宽策略验证根因:setenforce 0(仅测试),若问题消失,多半为 SELinux 策略/标签问题;定位后恢复 setenforce 1 并用 restorecon/setsebool 做最小化修正。
- 上下文切换
- 结合 pidstat -w、strace 找到热点进程与阻塞点;优化 I/O(批量/异步)、减少锁竞争、合并定时任务、处理中断风暴或绑定 CPU 亲和性,以降低 cs 与 nvcswch/s。