Linux LNMP故障如何排查
导读:LNMP故障排查流程与要点 一、快速定位流程 明确现象与范围:记录时间、URL/接口、错误码(如 502/504/403/500)、影响用户,优先确认是单站点还是全站、是间歇性还是持续性。 检查系统资源:用top/htop、vmstat、...
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_pass 与 listen 一致(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.ini 与 pool 配置正确 |
| Nginx 无法启动/端口被占用 | 端口冲突、配置语法错误 | 用 ss/netstat 查占用并释放;执行 nginx -t 修正语法后启动 |
| MySQL 无法连接 | 服务未启动、连接参数错误、权限/防火墙 | 用 mysqladmin ping 与 error.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/*.conf 的 listen、user/group、pm 参数
- MySQL:检查 /etc/mysql/my.cnf 的 bind-address、datadir 等
- 日志与监控
- 实时看错误: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 ping、mysql -u 用户 -p -h 主机 -P 端口 验证凭据与网络
五、排错最佳实践
- 变更可控:修改前备份配置与数据;变更后先 nginx -t 再 reload/restart,分阶段发布。
- 最小改动定位:通过注释/拆分配置、单独站点/虚拟主机测试,快速缩小范围。
- 权限与安全:网站目录建议文件 644、目录 755;核对 Nginx/PHP-FPM 运行用户与目录属主一致;必要时检查 SELinux/AppArmor 与云厂商安全组策略。
- 资源与阈值:为 **PHP-FPM(pm.max_children 等)**与 **MySQL(缓冲池、连接数)**设置合理阈值,避免资源争用。
- 可观测性:保留并定期归档错误日志、慢查询日志;建立监控告警(进程存活、端口连通、磁盘/IO、5xx 比例)。
- 文档化:每次故障记录现象-根因-修复-预防,形成运维手册与回滚预案,减少重复处理时间。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux LNMP故障如何排查
本文地址: https://pptw.com/jishu/770396.html
