进程故障是CentOS系统常见的问题,表现为进程崩溃、无响应、资源占用过高或无法启动等。以下是系统化的排查流程及实用技巧,覆盖从信息收集到问题解决的全链路:
1. 查看系统日志
系统日志是定位进程故障的“第一现场”,重点关注以下日志:
/var/log/messages
(记录系统启动、服务异常、硬件事件等);/var/log/secure
(记录SSH登录、权限问题等);dmesg
(查看内核环缓冲区消息,如硬件错误、驱动崩溃);/var/log/nginx/error.log
、MySQL的/var/log/mysql/error.log
(针对特定服务的错误信息)。journalctl
命令可灵活查询systemd管理的日志(如journalctl -u nginx -b
查看Nginx服务的本次启动日志)。2. 检查进程状态
ps aux
(显示所有进程的用户、CPU/内存占用、运行时间等);top
(动态排序进程,按P
(CPU)、M
(内存)键快速定位高占用进程);ps aux | grep 'Z'
(Z
状态表示僵尸进程,需杀掉其父进程修复)。1. 资源占用过高(CPU/内存/磁盘)
top
按P
排序,找到%CPU高的进程;若进程持续占用CPU,可使用strace -p <PID>
跟踪其系统调用,定位具体代码段;top
按M
排序,查看%MEM持续增长的进程;使用pmap -x <PID>
查看进程内存映射,或valgrind
工具检测内存泄漏;top
中wa
(I/O等待)值高表示磁盘瓶颈,使用iostat -x 1
(需安装sysstat
)查看磁盘读写延迟,或iotop
(实时监控磁盘I/O)。2. 进程无法启动
ldd <可执行文件>
查看进程依赖的库文件是否缺失(如libssl.so
);nginx -t
、MySQL的mysqld --validate-config
);getenforce
),使用audit2allow
分析/var/log/audit/audit.log
中的拒绝日志,调整策略(如setenforce 0
临时关闭测试)。3. 进程崩溃(如Segmentation Fault)
ulimit -c unlimited
),崩溃时会生成core.<PID>
文件,使用gdb <可执行文件> core.<PID>
查看崩溃时的堆栈信息;yum install kdump
),崩溃时生成vmcore
文件,通过crash
工具分析内核状态。1. 重启或杀掉异常进程
systemctl restart <服务名>
重启(避免直接杀进程导致数据丢失);kill -9 <父进程PID>
),父进程通常为init
(PID=1)或systemd
;kill -9 <PID>
强制终止(-9
为SIGKILL信号,不可捕获)。2. 更新与修复
yum update
更新系统和软件包,修复已知漏洞和bug;3. 调整系统参数
/etc/sysctl.conf
(如增加vm.swappiness
值减少Swap使用,调整kernel.pid_max
增加进程数上限),使用sysctl -p
生效;/etc/security/limits.conf
(如增加用户进程数限制* soft nproc 65535
)。1. 日常监控
htop
(交互式增强版top)、glances
(跨平台监控)或nmon
(专业级性能分析)实时查看系统状态;atop
(记录CPU、内存、磁盘历史数据)或Prometheus+Grafana
搭建监控平台,提前预警资源瓶颈。2. 定期维护
logrotate
工具定期压缩和删除旧日志(如/var/log/messages
),避免磁盘空间耗尽;smartctl -a /dev/sda
(需安装smartmontools
)检查硬盘健康状态,memtest86+
检测内存问题。通过以上流程,可系统化排查CentOS进程故障,从根源解决问题并预防复发。排查时需结合日志、资源监控和进程状态综合分析,避免盲目重启服务。