温馨提示×

Linux服务器LNMP故障排查方法有哪些

小樊
33
2025-12-14 01:57:20
栏目: 云计算

LNMP故障排查方法

一、标准化排查流程

  • 明确现象与范围:记录故障的时间、URL/接口、错误码(如 502/504/403/500)、影响用户与业务模块,优先从可复现路径入手。
  • 资源与系统基线:用top/htop、vmstat、iostat、df -h查看CPU、内存、磁盘 I/O、磁盘空间是否瓶颈;核对系统/内核/组件版本与变更记录。
  • 服务状态与监听:用systemctl status nginx php-fpm mysql确认运行状态;用ss -tulnp | grep ':80|:443|:9000’netstat -tulnp核对端口监听与进程存活。
  • 日志优先:先看Nginx error.log、PHP-FPM error.log、MySQL error.log,必要时再看**/var/log/syslog 或 /var/log/messages**获取系统级线索。
  • 网络与安全:用ping、traceroute、telnet/curl验证连通性;核对防火墙/安全组访问控制策略。
  • 配置核对:重点检查Nginx 的 fastcgi_pass 与 root、PHP-FPM 的 listen/user/group/pm、MySQL 的 bind-address 与权限
  • 变更与回滚:有近期变更时优先评估回滚;无法定位时准备最小复现并联系供应商/开发团队
  • 修复与复盘:实施修复、灰度验证、补充监控与告警、形成故障复盘Runbook
    以上流程遵循从硬件到软件、网络到应用的顺序,能快速收敛问题范围并降低风险。

二、关键日志与定位要点

组件 常见日志路径 典型错误关键词 快速定位思路
Nginx /var/log/nginx/error.log bind() to 0.0.0.0:80 failed (98: Address already in use)permission denied、upstream 超时 1) 用nginx -t检查语法;2) 用**ss -tulnp
PHP-FPM /var/log/php-fpm/error.log/var/log/php7.x-fpm.log;池日志如 /var/log/php-fpm/www-error.log Primary script unknownParse errorPermission denied 1) 确认listen与 Nginx 的 fastcgi_pass 一致;2) 检查文件存在与权限;3) 打开/查看PHP 错误日志
MySQL/MariaDB /var/log/mysql/error.log;慢查询日志(如 /var/log/mysql/slow.log Can’t connect to MySQL serverAccess denied、启动失败 1) 确认服务运行端口 3306监听;2) 核对my.cnf错误日志;3) 慢查询定位SQL 性能
系统 /var/log/syslog/var/log/messages OOM、磁盘满、SELinux/AppArmor 拒绝 1) 查资源告警;2) 查磁盘空间;3) 查安全策略拒绝
以上路径在不同发行版/安装方式下可能略有差异,优先以实际配置与日志输出为准。

三、常见故障场景与处理

  • 502 Bad Gateway / 504 Gateway Timeout
    • 检查PHP-FPM 是否存活进程耗尽,必要时调优 pm.max_children
    • 核对 Nginx 与 PHP-FPM 的 fastcgi_pass 地址/端口一致;
    • 查看 PHP-FPM 与 Nginx 错误日志的超时/连接拒绝信息;
    • 若使用Unix Socket,核对socket 文件路径与权限
  • Nginx 无法启动 / 端口被占用
    • 执行nginx -t定位语法问题;
    • ss -tulnp | grep ':80’netstat -tulnp找出占用进程并释放端口;
    • 处理重复 server_name等配置冲突。
  • 访问 PHP 页面直接下载
    • 通常是Nginx 未将 .php 交给 PHP-FPM,检查location ~ .php$fastcgi_pass配置。
  • “File not found” / Primary script unknown
    • 核对 root 与 SCRIPT_FILENAME 是否指向真实文件路径;
    • 检查文件是否存在PHP-FPM 运行用户权限
  • 数据库连接失败 / Access denied
    • 确认MySQL 服务运行监听地址
    • 核对应用配置的用户名/密码/库名授权主机
    • 查看MySQL 错误日志的访问拒绝细节。
  • 磁盘满导致服务异常
    • df -hdu -sh定位大文件(如日志);
    • 清理或归档后再重启服务。
      以上场景覆盖了线上最常见错误与对应处置路径,可据此快速排查并恢复业务。

四、高效命令清单

  • 服务与端口
    • 状态:systemctl status nginx php-fpm mysql
    • 监听:ss -tulnp | grep ‘:80|:443|:9000’netstat -tulnp
  • 资源监控top/htop、vmstat、iostat、iotop、iftop、glances、nmon
  • 日志跟踪tail -f /var/log/nginx/error.log /var/log/php-fpm/error.log /var/log/mysql/error.log
  • 连通性ping、traceroute、telnet/curl
  • 配置校验nginx -t;变更后reload/restart对应服务
  • 空间与 Inodedf -h、du -sh
    以上命令覆盖状态、监听、资源、日志、连通性、配置校验与空间六大维度,适合作为现场排障的“第一响应”工具集。

0