进程故障是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进程故障,从根源解决问题并预防复发。排查时需结合日志、资源监控和进程状态综合分析,避免盲目重启服务。