温馨提示×

Linux Context如何进行故障排查

小樊
40
2025-11-23 15:57:01
栏目: 智能运维

Linux Context故障排查指南

一 明确问题类型

  • 含义一:SELinux 安全上下文(security context)
    典型现象是访问被拒、服务启动失败、日志出现 “permission denied”“AVC denied”,多与文件、进程、端口的 SELinux 标签或布尔值配置不当有关。
  • 含义二:CPU 上下文切换(context switch)
    典型现象是系统负载偏高、响应变慢,通过 vmstatcsinpidstat -w 看到切换次数异常升高。

二 SELinux 安全上下文排查与修复

  • 快速定位
    • 查看服务或命令的拒绝日志:
      • journalctl -xe(系统级日志)
      • tail -f /var/log/audit/audit.log | grep AVC(若存在 auditd)
        关注被拒绝的主体(进程/用户)、客体(文件/目录/端口)、操作与权限需求。
  • 核对与修正标签
    • 查看文件/目录上下文:
      • ls -Z /path
    • 恢复默认上下文(基于策略):
      • restorecon -Rv /path
    • 按类型设置上下文(示例):
      • 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(关注 csin 列;若 cs 持续很高,说明切换频繁)
  • 定位到进程
    • 按进程查看自愿/非自愿切换:
      • pidstat -w 1(关注 cswch/snvcswch/s;自愿切换多与 I/O 等待相关,非自愿多与 CPU 抢占/时间片相关)
  • 累计值与趋势
    • 查看系统累计上下文切换:
      • grep ctxt /proc/stat(第一列为自开机起的累计 ctxt
  • 深入诊断
    • 对可疑进程进行系统调用跟踪:
      • strace -p -c(识别频繁阻塞/唤醒来源)
  • 常见成因
    • 时间片到期调度、I/O 阻塞、锁竞争/自旋、硬件中断风暴等。

四 通用日志与系统状态检查

  • 日志聚合
    • journalctl -xetail -f /var/log/syslog(Debian 系列)、dmesg(内核消息)
  • 资源与服务
    • top/htop(负载与占用)、ps aux(进程快照)、systemctl status (服务状态与最近日志)
  • 变更与回滚
    • 排查期间避免盲目变更,必要时先备份关键配置;若涉及系统更新/重装组件,先准备回滚方案。

五 最小化复现与修复建议

  • SELinux
    • 临时放宽策略验证根因:setenforce 0(仅测试),若问题消失,多半为 SELinux 策略/标签问题;定位后恢复 setenforce 1 并用 restorecon/setsebool 做最小化修正。
  • 上下文切换
    • 结合 pidstat -wstrace 找到热点进程与阻塞点;优化 I/O(批量/异步)、减少锁竞争、合并定时任务、处理中断风暴或绑定 CPU 亲和性,以降低 csnvcswch/s

0