首页主机资讯LNMP故障排查步骤

LNMP故障排查步骤

时间2025-10-09 22:50:03发布访客分类主机资讯浏览629
导读:一、问题确认与信息收集 首先明确故障现象(如网站无法访问、502/500错误、性能卡顿等),收集用户反馈的具体时间及受影响功能;同时查看系统告警信息(如邮件、短信通知)和监控工具(如Zabbix、Prometheus)的异常记录,初步定位故...

一、问题确认与信息收集
首先明确故障现象(如网站无法访问、502/500错误、性能卡顿等),收集用户反馈的具体时间及受影响功能;同时查看系统告警信息(如邮件、短信通知)和监控工具(如Zabbix、Prometheus)的异常记录,初步定位故障范围。

二、系统基础状态检查

  1. 资源使用分析:使用top(按CPU排序)、htop(更直观的资源监控)、df -h(磁盘空间)、free -m(内存使用)、iostat -x 1(磁盘I/O)等命令,检查CPU、内存、磁盘、网络等资源是否耗尽(如内存占用超过80%、磁盘空间不足10%)。
  2. 版本兼容性确认:通过uname -r(Linux内核版本)、nginx -v(Nginx版本)、mysql -V(MySQL版本)、php -v(PHP版本),确认各组件版本兼容(如Nginx 1.25+与PHP 8.2+的FastCGI协议兼容性)。

三、日志深度分析(核心步骤)
日志是故障定位的关键,需重点检查以下日志的最近10-20条错误记录

  • Nginx错误日志:默认路径为/var/log/nginx/error.log(可通过nginx -V查看自定义路径),主要关注连接拒绝、超时、权限问题(如connect() to unix:/tmp/php-fpm.sock failed (13: Permission denied))。
  • PHP-FPM错误日志:默认路径为/var/log/php-fpm.log/var/log/php7.4-fpm.log(取决于PHP版本),主要关注脚本语法错误、进程崩溃(如WARNING: [pool www] child 1234 exited on signal 11 (SIGSEGV) after 10.234 seconds from start)。
  • MySQL错误日志:默认路径为/var/log/mysql/error.log/var/log/mariadb/error.log,主要关注启动失败、连接数超限、慢查询(如ERROR 1045 (28000): Access denied for user 'root'@'localhost')。
  • 系统日志:使用journalctl -xe(Systemd系统)或tail -f /var/log/messages,查看内核级错误(如OOM Killer杀死进程)。

四、服务进程与端口状态检查

  1. 服务运行状态:使用systemctl status nginxsystemctl status php-fpmsystemctl status mysql(或service mysql status),确认服务是否处于active (running)状态;若未运行,尝试启动服务并查看启动日志(journalctl -u nginx -b)。
  2. 进程数量监控:使用ps aux | grep -E 'nginx|php-fpm|mysql',检查进程是否存在异常(如PHP-FPM进程数为0,或Nginx主进程不存在)。
  3. 端口监听检查:使用netstat -tulnp | grep -E '80|443|9000'(Nginx默认80/443端口、PHP-FPM默认9000端口)或ss -tulnp | grep -E '80|443|9000',确认服务是否在正确端口监听;若端口未监听,可能是配置错误或端口被占用(如netstat -tulnp | grep 9000显示端口被Apache占用)。

五、配置文件语法与一致性检查

  1. Nginx配置:使用nginx -t命令测试配置文件语法(如/etc/nginx/nginx.conf/etc/nginx/sites-enabled/*下的虚拟主机配置),重点检查server_nameroot路径、fastcgi_pass指令(如fastcgi_pass unix:/tmp/php-fpm.sock; 是否与PHP-FPM的listen指令一致)。
  2. PHP-FPM配置:检查/etc/php/7.4/fpm/php.ini(PHP核心配置)、/etc/php/7.4/fpm/pool.d/www.conf(进程池配置),重点确认listen(如listen = /tmp/php-fpm.socklisten = 127.0.0.1:9000)、pm.max_children(进程数,根据内存调整,如pm.max_children = 50对应约500MB内存/进程)、user/group(与Nginx用户一致,如www-data)。
  3. MySQL配置:检查/etc/mysql/my.cnf/etc/mysql/mariadb.conf.d/50-server.cnf,重点确认bind-address(如bind-address = 127.0.0.1仅允许本地连接,或0.0.0.0允许远程连接)、max_connections(最大连接数,默认151,若并发高需调整)。

六、权限与安全设置检查

  1. 文件/目录权限:确保Nginx用户(如www-data)对网站根目录(如/var/www/html)有读取权限(chown -R www-data:www-data /var/www/htmlchmod -R 755 /var/www/html);避免权限过高(如chmod 777),防止安全风险。
  2. SELinux设置:若系统启用SELinux(getenforce返回Enforcing),需调整策略允许Nginx访问网站目录(chcon -R -t httpd_sys_rw_content_t /var/www/html)或允许PHP-FPM连接套接字(setsebool -P httpd_can_network_connect 1)。
  3. 防火墙规则:使用iptables -L -nfirewall-cmd --list-all(Firewalld),检查80/443端口是否开放(如firewall-cmd --add-service=http --permanentfirewall-cmd --reload);避免误拦截Nginx或PHP-FPM的流量。

七、网络连通性测试

  1. 服务器自身网络:使用ping 8.8.8.8测试网络连通性,traceroute 8.8.8.8(或mtr 8.8.8.8)检查路由是否正常;若无法ping通,可能是网卡故障或DNS问题(cat /etc/resolv.conf检查DNS配置)。
  2. 端口连通性:使用telnet 127.0.0.1 80nc -zv 127.0.0.1 80(Netcat),测试Nginx端口是否可从本地访问;若无法连接,可能是Nginx未启动或端口被防火墙拦截。

八、常见问题针对性解决

  1. 502 Bad Gateway:常见原因包括PHP-FPM未运行、fastcgi_pass路径错误、pm.max_children不足(进程数耗尽)。解决方法:重启PHP-FPM(systemctl restart php-fpm)、修正Nginx中的fastcgi_pass指令、调整pm.max_children(如pm.max_children = 100,根据服务器内存计算:内存大小(MB)/单个PHP进程内存占用(MB),如1GB内存分配10个进程,每个进程约100MB)。
  2. 500 Internal Server Error:常见原因包括PHP代码语法错误、PHP扩展缺失(如mysqli扩展未安装)、权限问题。解决方法:查看PHP错误日志(/var/log/php-fpm/error.log)定位代码错误、安装缺失扩展(apt install php-mysqli)、调整文件权限(chown -R www-data:www-data /var/www/html)。
  3. 403 Forbidden:常见原因包括Nginx配置中的deny指令、权限不足(Nginx用户无法访问目录)。解决方法:检查Nginx配置中的location块(如deny all; 是否误配置)、调整目录权限(chmod 755 /var/www/html)。
  4. MySQL启动失败:常见原因包括配置文件错误(如datadir路径不存在)、端口冲突(3306端口被占用)、数据目录权限问题。解决方法:检查my.cnf配置文件(mysql -t测试语法)、停止占用端口的服务(kill -9 $(lsof -t -i:3306))、修改数据目录权限(chown -R mysql:mysql /var/lib/mysql)。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: LNMP故障排查步骤
本文地址: https://pptw.com/jishu/721875.html
如何升级LNMP组件 LNMP中如何实现负载均衡

游客 回复需填写必要信息