Ubuntu LAMP服务器故障排查指南
首先记录故障的具体表现(如无法访问网站、页面显示500错误、数据库连接失败、服务器无响应等)、发生时间及触发条件(如重启服务器后出现、访问特定页面时出现),这有助于缩小排查范围。
使用systemctl命令确认LAMP核心服务(Apache、MySQL/MariaDB、PHP-FPM)是否正常运行:
sudo systemctl status apache2 # 检查Apache状态
sudo systemctl status mysql # 检查MySQL状态(若使用MariaDB,替换为mariadb)
sudo systemctl status php8.3-fpm # 检查PHP-FPM状态(版本号根据实际安装调整)
若服务未运行,使用sudo systemctl start <服务名>启动对应服务,并通过sudo systemctl enable <服务名>设置开机自启。
日志是定位故障的关键,重点检查以下日志文件:
/var/log/apache2/error.log(记录Apache启动、运行中的错误,如配置文件语法错误、模块加载失败);/var/log/mysql/error.log(记录数据库启动失败、查询错误、权限问题);/var/log/php8.3-fpm.log(记录PHP脚本错误,如语法错误、未定义函数,需确保php.ini中error_log路径正确)。
使用tail -f <日志文件>实时查看最新错误信息,或grep "关键词" <日志文件>筛选特定错误。确保服务器能正常访问网络及外部服务:
ping www.baidu.com(若无法ping通,可能是网络硬件故障或DNS配置问题);nslookup www.baidu.com(若解析失败,编辑/etc/resolv.conf添加正确DNS服务器,如nameserver 8.8.8.8);sudo netstat -tuln | grep -E '80|443|3306'(确认Apache(80/443)、MySQL(3306)端口处于监听状态,若端口未监听,可能是服务未启动或配置文件错误)。配置文件语法错误会导致服务无法启动:
sudo apachectl configtest(输出Syntax OK表示配置正确,若有错误,根据提示定位问题配置文件);sudo mysqld --validate-config(检查/etc/mysql/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf语法);php -m(检查所需PHP模块是否启用,如mysqli、gd,未启用的模块需在php.ini中取消注释或添加)。Apache(默认用户www-data)需要正确权限访问网站文件和目录:
sudo chown -R www-data:www-data /var/www/html # 将网站目录所有者设为www-data
sudo chmod -R 755 /var/www/html # 设置目录权限为755(目录可读可执行),文件权限为644(文件可读可写)
若权限过严(如700),会导致Apache无法读取文件,引发403 Forbidden错误。
端口被占用会导致服务无法启动,使用以下命令检查端口占用情况:
sudo netstat -tulnp | grep -E '80|443|3306|9000' # 查看指定端口对应的进程ID(PID)
若端口被占用,通过kill -9 <PID>终止占用进程(确认进程无用后),或修改服务端口(如将Apache端口从80改为8080,需同步修改配置文件并重启服务)。
磁盘空间不足或内存耗尽会导致服务崩溃:
df -h(查看各分区使用情况,若Use%接近100%,需清理日志文件或大文件);free -h(查看内存及交换分区使用情况,若内存不足,可增加交换分区或优化应用内存占用);sudo du -sh /var/* | sort -rh | head -n 10(查看/var目录下最大的10个文件,定位占用空间多的文件)。在完成配置更改或修复后,重启对应服务使更改生效:
sudo systemctl restart apache2
sudo systemctl restart mysql
sudo systemctl restart php8.3-fpm
重启后再次检查服务状态及日志,确认故障是否解决。
若自行排查无法解决,可将错误日志、配置文件片段(隐去敏感信息)发布到技术社区(如Stack Overflow、Ubuntu论坛),描述问题现象及已尝试的解决步骤,寻求他人帮助。