温馨提示×

Ubuntu中LNMP故障排查技巧

小樊
45
2025-11-02 08:40:49
栏目: 智能运维

Ubuntu中LNMP故障排查技巧

1. 快速检查服务运行状态

使用systemctl命令确认LNMP核心服务是否处于运行状态,这是排查故障的第一步:

  • Nginxsudo systemctl status nginx(若未运行,用sudo systemctl start nginx启动)
  • MySQL/MariaDBsudo systemctl status mysqlsudo systemctl status mariadb
  • PHP-FPMsudo systemctl status php7.x-fpm(根据实际PHP版本调整,如php7.4-fpmphp8.1-fpm
    服务未启动会导致网站无法访问、数据库连接失败等问题,需优先确保服务正常运行。

2. 深入分析错误日志

日志是定位故障的“金钥匙”,LNMP各组件的错误日志路径如下:

  • Nginx/var/log/nginx/error.log(记录HTTP请求错误、配置语法问题等)
  • MySQL/MariaDB/var/log/mysql/error.log(记录数据库启动失败、查询错误等)
  • PHP-FPM/var/log/php7.x-fpm.log/var/log/php-fpm/error.log(记录PHP脚本错误、FPM进程异常等)
    使用tail -f /path/to/logfile实时查看日志,快速定位最新错误信息(如Nginx的“403 Forbidden”可能对应权限问题,MySQL的“Access denied”可能对应用户权限错误)。

3. 验证配置文件语法

配置文件语法错误会导致服务无法启动或运行异常,需使用对应命令检查:

  • Nginxsudo nginx -t(检查/etc/nginx/nginx.conf及站点配置文件的语法,如/etc/nginx/sites-available/default
  • MySQL/MariaDBsudo mysqld --validate-config(部分版本支持,或通过sudo systemctl restart mysql观察启动日志)
  • PHP-FPMsudo php-fpm7.x -t(如sudo php-fpm7.4 -t,检查/etc/php/7.x/fpm/php.ini/etc/php/7.x/fpm/pool.d/www.conf的语法)
    若语法有误,需修正后重启服务(sudo systemctl restart 服务名)。

4. 排查端口占用问题

端口被占用会导致服务无法监听请求,常见端口及排查方法:

  • Nginx:检查80(HTTP)、443(HTTPS)端口,sudo netstat -tulnp | grep ':80\b'sudo ss -tulnp | grep ':80\b'ss命令更高效)
  • MySQL/MariaDB:检查3306端口,sudo netstat -tulnp | grep ':3306\b'
  • PHP-FPM:检查Unix socket(如/var/run/php/php7.x-fpm.sock)或端口(若配置为TCP),sudo ls -l /var/run/php/php7.x-fpm.socksudo netstat -tulnp | grep 'php-fpm'
    若端口被占用,可通过kill -9 进程ID终止冲突进程(需确认进程合法性),或修改冲突服务的端口配置。

5. 检查防火墙与网络连通性

防火墙或网络问题会阻止外部访问或组件间通信:

  • 防火墙设置:使用sudo ufw status查看规则,确保允许HTTP(80)、HTTPS(443)、MySQL(3306)等端口,如sudo ufw allow 80/tcpsudo ufw allow 3306/tcp
  • 网络连通性:用ping 8.8.8.8测试服务器是否能访问互联网,ping 域名测试DNS解析,traceroute 域名查看网络路径(排查网络中断或路由问题)
    若防火墙阻止了端口,需添加对应规则;若网络不通,需联系网络管理员。

6. 排查权限问题

权限不足会导致Nginx无法读取网站文件、PHP-FPM无法执行脚本、MySQL无法访问数据库文件:

  • 网站文件权限:确保Nginx用户(通常为www-data)有权限读取网站目录,如sudo chown -R www-data:www-data /var/www/htmlsudo chmod -R 755 /var/www/html
  • PHP-FPM进程用户:检查/etc/php/7.x/fpm/pool.d/www.conf中的usergroup设置(通常为www-data),确保与Nginx用户一致
  • MySQL用户权限:登录MySQL后,使用SHOW GRANTS FOR 'your_user'@'localhost';查看用户权限,确保其有访问目标数据库的权限(如GRANT ALL PRIVILEGES ON database_name.* TO 'your_user'@'localhost';

7. 解决常见特定错误

  • 502 Bad Gateway:通常因PHP-FPM服务未运行或Nginx与PHP-FPM通信失败。检查PHP-FPM服务状态(sudo systemctl status php7.x-fpm),确保Nginx配置中的fastcgi_pass指向正确的PHP-FPM socket或端口(如fastcgi_pass unix:/var/run/php/php7.x-fpm.sock;)。
  • 504 Gateway Timeout:通常因PHP-FPM进程处理超时。调整/etc/php/7.x/fpm/pool.d/www.conf中的request_terminate_timeout(如设置为300秒),并重启PHP-FPM服务。
  • MySQL连接失败:检查MySQL服务是否启动(sudo systemctl status mysql),确认连接配置(主机名、用户名、密码、端口)正确,检查防火墙是否阻止3306端口,使用SHOW GRANTS FOR 'your_user'@'localhost';确认用户权限。

8. 系统资源监控

系统资源耗尽可能导致服务响应缓慢或崩溃,使用以下工具监控:

  • top/htop:查看CPU、内存使用率,识别高消耗进程(如sort -k 9按CPU排序,sort -k 4按内存排序)
  • vmstat 1:查看虚拟内存、CPU、IO等统计信息(每秒刷新一次)
  • iostat 1:查看磁盘IO情况(需安装sysstat包,sudo apt install sysstat
  • df -h:查看磁盘空间使用情况(避免根分区或网站目录所在分区满)
    若资源耗尽,需优化服务配置(如增加PHP-FPM进程数、调整MySQL缓存)或升级服务器配置。

0