Ubuntu LNMP中如何进行故障排查
Ubuntu LNMP故障排查系统化流程
1. 确定故障类型
首先收集用户反馈(如“网站无法访问”“502 Bad Gateway”)和系统表现(如服务无法启动、响应延迟),明确故障范围(是单个服务异常还是整体架构问题),这是后续排查的基础。
2. 检查服务运行状态
使用systemctl
命令逐一验证LNMP核心服务是否正常运行:
sudo systemctl status nginx # 检查Nginx状态
sudo systemctl status mysql # 检查MySQL/MariaDB状态(根据实际服务名调整)
sudo systemctl status php7.x-fpm # 检查PHP-FPM状态(如php7.4-fpm、php8.1-fpm)
若服务未运行,使用sudo systemctl start <
服务名>
启动;若启动失败,需结合日志进一步分析。
3. 分析关键日志文件
日志是定位故障的“金钥匙”,重点检查以下日志的最新错误信息:
- Nginx错误日志:
/var/log/nginx/error.log
(记录HTTP请求错误、配置语法问题、端口冲突等); - PHP-FPM错误日志:
/var/log/php7.x-fpm.log
或/var/log/php-fpm/error.log
(记录PHP代码执行错误、FPM进程崩溃等); - MySQL错误日志:
/var/log/mysql/error.log
(记录数据库连接失败、查询错误、权限问题等)。 使用tail -f < 日志路径>
实时查看最新错误动态,快速定位问题根源。
4. 验证配置文件语法
配置文件错误是服务无法启动的常见原因,使用以下命令检查语法正确性:
sudo nginx -t # 检查Nginx主配置文件(/etc/nginx/nginx.conf)及站点配置
sudo php-fpm -t # 检查PHP-FPM配置文件(如/etc/php/7.x/fpm/php.ini、/etc/php/7.x/fpm/pool.d/www.conf)
sudo mysql --validate-config # 部分MySQL版本支持(或检查mysqld.cnf语法)
若语法错误,修正后需重启对应服务使更改生效(如sudo systemctl restart nginx
)。
5. 排查端口占用问题
端口冲突会导致服务无法监听指定端口(如Nginx的80/443端口、MySQL的3306端口),使用以下命令检查端口占用情况:
sudo netstat -tulnp | grep ':80' # 检查80端口
sudo netstat -tulnp | grep ':3306' # 检查3306端口
若端口被占用,通过ps -ef | grep <
进程名>
找到占用进程,使用kill -9 <
进程ID>
终止异常进程,再重启服务。
6. 检查系统资源使用
资源瓶颈(如CPU满载、内存耗尽、磁盘空间不足)会导致服务响应缓慢或崩溃,使用以下命令监控资源状态:
top # 动态查看CPU、内存占用排名
free -h # 查看内存及交换分区使用情况
df -h # 查看磁盘空间使用情况
vmstat 1 5 # 查看虚拟内存、磁盘I/O统计(每秒1次,共5次)
iostat -x 1 5 # 查看磁盘I/O详细情况(需安装sysstat包)
若资源不足,需优化服务配置(如调整PHP-FPM进程数)、清理无用文件或升级服务器配置。
7. 验证网络连通性
网络问题是网站无法访问的外部因素,需检查以下内容:
- 服务器网络连通性:
ping 8.8.8.8
(测试是否能访问外网); - DNS解析:
nslookup www.baidu.com
(测试域名解析是否正常); - 防火墙设置:
sudo ufw status
(确保允许HTTP(80)、HTTPS(443)、MySQL(3306)等端口流量); - 外部访问:从客户端使用
telnet < 服务器IP> 80
测试端口是否可达。
8. 处理常见特定错误
-
502 Bad Gateway(Nginx与PHP-FPM通信失败):
- 检查PHP-FPM服务是否运行(
sudo systemctl status php7.x-fpm
); - 确认Nginx配置中的
fastcgi_pass
指令指向PHP-FPM的正确监听地址(如unix:/run/php/php7.4-fpm.sock
或127.0.0.1:9000
); - 检查PHP-FPM配置中的
listen
指令是否与Nginx配置一致。
- 检查PHP-FPM服务是否运行(
-
500 Internal Server Error(PHP代码或配置错误):
- 查看PHP错误日志(
/var/log/php7.x-fpm.log
),定位代码中的语法错误(如缺少分号、括号不匹配); - 开发环境中开启错误显示(在PHP文件顶部添加
error_reporting(E_ALL); ini_set('display_errors', 1);
),便于调试。
- 查看PHP错误日志(
-
403 Forbidden(权限问题):
- 检查Nginx配置中的
location
块是否有deny
指令; - 确保Nginx用户(通常是
www-data
)对网站根目录有读取权限(sudo chown -R www-data:www-data /var/www/html
)。
- 检查Nginx配置中的
9. 更新系统与软件包
过时的系统或软件包可能存在安全漏洞或兼容性问题,定期更新:
sudo apt update # 更新软件包列表
sudo apt upgrade # 升级所有可升级的软件包
sudo apt dist-upgrade # 升级系统版本(可选)
10. 寻求专业帮助
若以上步骤无法解决问题,建议:
- 查阅LNMP官方文档(如LNMP.org);
- 在技术社区(如Stack Overflow、知乎)搜索类似问题;
- 联系服务器提供商或专业运维人员协助排查。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu LNMP中如何进行故障排查
本文地址: https://pptw.com/jishu/725943.html