温馨提示×

Linux LNMP故障如何排查

小樊
44
2025-12-12 02:27:53
栏目: 智能运维

LNMP故障排查流程与要点

一、快速定位流程

  • 明确现象与范围:记录时间、URL/接口、错误码(如 502/504/403/500)、影响用户,优先确认是单站点还是全站、是间歇性还是持续性
  • 检查系统资源:用top/htop、vmstat、iostat、iotop、iftop、glances查看CPU、内存、磁盘 I/O、网络是否瓶颈或耗尽。
  • 服务状态与端口:用systemctl status nginx/mysql/php-fpm确认运行状态;用ss -tulnp | grep ':80|:443|:3306’netstat -tulnp查看监听与端口占用。
  • 配置语法与变更:执行nginx -t校验配置;变更后按序reload/restart相关服务。
  • 日志优先:先看Nginx/PHP-FPM/MySQL的错误日志,再看**/var/log/syslog 或 /var/log/messages**的系统级日志。
  • 连通性与访问控制:用ping、traceroute/tracert、telnet/curl测试内外网连通;核对防火墙(ufw/iptables)与安全组是否放行80/443/3306
  • 安全与权限:排查异常进程、可疑登录、文件篡改;核对网站目录权限(文件 644、目录 755)运行用户
  • 复现与回归:在测试环境复现,修复后回归验证并记录根因与修复步骤

二、关键日志与配置文件路径

组件 常用服务管理 关键日志 常用配置文件 快速校验/重启
Nginx systemctl status nginx /var/log/nginx/error.log(访问日志 /var/log/nginx/access.log /etc/nginx/nginx.conf/etc/nginx/sites-available/ nginx -t;systemctl reload nginx
PHP-FPM systemctl status php-fpm /var/log/php-fpm/error.log(路径随版本/发行版可能为 /var/log/php7.x-fpm.log /etc/php/{version}/fpm/php.ini/etc/php/{version}/fpm/pool.d/www.conf systemctl reload php-fpm
MySQL/MariaDB systemctl status mysql/mariadb /var/log/mysql/error.log;慢查询日志 /var/log/mysql/slow.log /etc/mysql/my.cnf/etc/my.cnf mysqladmin ping;systemctl restart mysql
系统 - /var/log/syslog/var/log/messages - tail -f /var/log/syslog

三、常见故障与处理对照表

症状 优先检查 快速修复要点
502 Bad Gateway Nginx error.log 报 “connect() to unix:/run/php/phpX.Y-fpm.sock failed” 或 “Connection refused”;PHP-FPM 未运行/进程耗尽 确认 php-fpm 运行;核对 fastcgi_passlisten 一致(socket 路径或 127.0.0.1:9000);适当调大 pm.max_children;重启 php-fpm 与 nginx
504 Gateway Timeout 后端处理慢或网络延迟;Nginx 超时配置偏小 优化慢接口/SQL;适度增大 fastcgi_read_timeout / fastcgi_send_timeout;检查数据库慢查询
403 Forbidden 目录无索引文件且未开启 autoindex;文件/目录权限错误;SELinux/AppArmor 限制 设置默认首页或开启 autoindex;校正权限(文件 644、目录 755);检查 SELinux/AppArmor 策略
500 Internal Server Error PHP 语法/致命错误、未捕获异常;PHP-FPM 启动失败 打开/查看 PHP 错误日志;修正代码或扩展问题;确保 php.inipool 配置正确
Nginx 无法启动/端口被占用 端口冲突、配置语法错误 ss/netstat 查占用并释放;执行 nginx -t 修正语法后启动
MySQL 无法连接 服务未启动、连接参数错误、权限/防火墙 mysqladmin pingerror.log 排查;核对 主机/端口/用户/密码;放行 3306 或调整授权
网站访问慢 CPU/内存/磁盘 I/O 瓶颈;慢查询;外部依赖 top/vmstat/iostat 定位瓶颈;开启并分析 slow.log;优化索引/SQL 与缓存策略

四、高效排查命令清单

  • 服务与端口
    • 查看状态:systemctl status nginx php-fpm mysql
    • 端口监听:ss -tulnp | grep -E ‘:80|:443|:3306’
  • 配置与语法
    • Nginx:nginx -t
    • PHP-FPM:检查 /etc/php/{version}/fpm/pool.d/*.conflistenuser/grouppm 参数
    • MySQL:检查 /etc/mysql/my.cnfbind-addressdatadir
  • 日志与监控
    • 实时看错误:tail -f /var/log/nginx/error.log /var/log/php-fpm/error.log /var/log/mysql/error.log
    • 资源监控:top/htop、vmstat 1、iostat -x 1、iotop、iftop、glances
  • 连通性与数据库
    • 网络:ping、traceroute/tracert、telnet 127.0.0.1 9000、curl -Iv https://域名
    • MySQL:mysqladmin pingmysql -u 用户 -p -h 主机 -P 端口 验证凭据与网络

五、排错最佳实践

  • 变更可控:修改前备份配置与数据;变更后先 nginx -t 再 reload/restart,分阶段发布。
  • 最小改动定位:通过注释/拆分配置单独站点/虚拟主机测试,快速缩小范围。
  • 权限与安全:网站目录建议文件 644、目录 755;核对 Nginx/PHP-FPM 运行用户与目录属主一致;必要时检查 SELinux/AppArmor 与云厂商安全组策略。
  • 资源与阈值:为 **PHP-FPM(pm.max_children 等)**与 **MySQL(缓冲池、连接数)**设置合理阈值,避免资源争用。
  • 可观测性:保留并定期归档错误日志、慢查询日志;建立监控告警(进程存活、端口连通、磁盘/IO、5xx 比例)。
  • 文档化:每次故障记录现象-根因-修复-预防,形成运维手册回滚预案,减少重复处理时间。

0