温馨提示×

centos lamp怎样进行故障排查

小樊
47
2025-10-26 05:08:58
栏目: 智能运维

CentOS LAMP故障排查指南

1. 检查服务运行状态

首先确认LAMP核心服务(Apache、MySQL/MariaDB、PHP-FPM)是否处于运行状态。使用以下命令查看服务状态:

sudo systemctl status httpd      # Apache状态
sudo systemctl status mysqld     # MySQL状态(若使用MariaDB则为mariadb)
sudo systemctl status php-fpm    # PHP-FPM状态(若使用PHP-FPM)

若服务未启动,可通过sudo systemctl start <服务名>启动对应服务;若需开机自启,执行sudo systemctl enable <服务名>

2. 查看错误日志定位问题

日志是故障排查的关键依据,LAMP各组件的错误日志位置如下:

  • Apache/var/log/httpd/error_log(CentOS默认路径)
  • MySQL/MariaDB/var/log/mysqld.log(MySQL)或/var/log/mysql/error.log(MariaDB)
  • PHP-FPM/var/log/php-fpm/error.log(默认路径,需根据php.iniphp-fpm.conf确认) 使用tail -f <日志路径>实时查看最新错误信息,或通过grep 'error' <日志路径>筛选关键错误。

3. 验证配置文件语法

配置文件语法错误会导致服务无法启动,需逐一检查:

  • Apache:使用apachectl configtest命令检测httpd.conf及包含的虚拟主机配置文件语法,若输出“Syntax OK”则表示配置正确。
  • MySQL:重启服务时添加--validate-config参数(如sudo systemctl restart mysqld --validate-config),或在配置文件中设置skip-log-bin临时跳过二进制日志验证(仅用于调试)。
  • PHP:检查php.ini中的关键配置(如memory_limitupload_max_filesize),确保路径和数值合法。

4. 检查端口占用情况

LAMP常用端口及检查方法:

  • Apache:默认监听80(HTTP)、443(HTTPS)端口;
  • MySQL:默认监听3306端口;
  • PHP-FPM:默认通过Unix Socket(如/var/run/php-fpm/php-fpm.sock)或9000端口通信。 使用以下命令查看端口占用:
sudo netstat -tulnp | grep -E '80|443|3306|9000'  # 查看端口及占用进程
sudo lsof -i :80                                # 查看80端口具体进程

若端口被占用,可通过kill -9 <PID>终止占用进程(确认进程无用后),或修改服务配置文件更换端口。

5. 确认文件权限正确

Apache和MySQL需要访问特定目录和文件,权限错误会导致“403 Forbidden”或“无法连接数据库”等问题:

  • Web根目录(如/var/www/html):文件权限设为644(sudo chmod 644 /var/www/html/*),目录权限设为755(sudo chmod 755 /var/www/html)。
  • Apache运行用户:CentOS中Apache默认用户为apache,需将Web目录所有者改为apachesudo chown -R apache:apache /var/www/html)。
  • MySQL Socket文件:若使用Socket连接,确保/tmp/mysql.sock(或自定义路径)存在且权限正确(sudo chmod 777 /tmp/mysql.sock,测试后恢复安全权限)。

6. 调整SELinux与防火墙设置

  • SELinux:若处于Enforcing模式,可能阻止服务访问文件或端口。临时设置为Permissive模式测试(sudo setenforce 0),若问题解决,可编辑/etc/selinux/configSELINUX=enforcing改为SELINUX=permissive,并重启系统。
  • 防火墙:使用firewalld开放必要端口(HTTP、HTTPS、MySQL):
    sudo firewall-cmd --permanent --zone=public --add-service=http
    sudo firewall-cmd --permanent --zone=public --add-service=https
    sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp  # 若使用MySQL
    sudo firewall-cmd --reload
    
    若使用iptables,添加规则:sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT,并保存规则(sudo service iptables save)。

7. 测试网络连通性

确保服务器能访问外部网络及内部服务:

  • Ping测试ping www.baidu.com(检查网络连通性);
  • Traceroute测试traceroute www.baidu.com(检查数据包路径);
  • 端口连通性测试:从客户端使用telnet <服务器IP> 80nc -zv <服务器IP> 80(检查HTTP端口是否开放)。

8. 检查系统资源使用

系统资源不足(如内存耗尽、磁盘空间满)会导致服务崩溃或响应缓慢:

  • 查看磁盘空间df -h(检查/根分区及/var分区,避免空间耗尽);
  • 查看内存与CPU使用top(按M排序内存占用,按P排序CPU占用),或htop(更直观的交互式工具);
  • 清理缓存:若内存不足,可清理Apache缓存(sudo systemctl restart httpd)或系统缓存(sudo sync && echo 3 | sudo tee /proc/sys/vm/drop_caches)。

9. 解决常见特定问题

  • Apache无法启动:检查/etc/httpd/conf/httpd.confListen指令是否正确(如Listen 80),或端口被其他服务(如Nginx)占用;
  • MySQL无法连接:检查/etc/my.cnfbind-address是否设为0.0.0.0(允许远程连接),或密码是否正确;
  • PHP无法解析:确保Apache配置文件中加载了PHP模块(如LoadModule php_module modules/libphp.so),且AddType application/x-httpd-php .php指令存在;
  • PHP-FPM无法启动:检查/etc/php-fpm.conf/etc/php/7.x/fpm/pool.d/www.conf中的listen指令(如listen = /var/run/php-fpm/php-fpm.sock),并与Apache的php-fpm配置一致(如SetHandler "proxy:unix:/var/run/php-fpm/php-fpm.sock|fcgi://localhost")。

0