东莞列举网 > 商务服务 > 网站/软件服务 > Apache错误与解决方法
东莞
[切换城市]

Apache错误与解决方法

更新时间:2018-02-01 10:39:59 浏览次数:44次
区域: 东莞 > 莞城
类别:IDC服务
地址:广东省东莞市莞城街道汇峰路1号汇峰中心B区501单元
  Apache"No spache left on device"错误与解决方法

  1、错误现象

  这是一个使用盛网服务器的客户案例,客户反映在执行“apache start”启动Apache时无报错信息,但是网页还是不能访问。客户的网站是基于Apache+PHP+Mysql的在线交易平台,听到客户描述的现象后,反应应是防火墙屏蔽了HTTP端口或SELinux的问题,于是登录服务器查看相关信息,如下图。

  从输出可知,防火墙所有策略都处于开放状态,并未所任何限制,而SELinux也处于关闭状态,应该不是防火墙问题导致的。

  既然不是防火墙拦截的问题,那么看看httpd进程是否存在及httpd端口是否正常启动,操作过程如下图。

  这个操作首先查看了服务器上的httpd进程,发现并没有httpd进程运行,同时httpd对应的端口80也并无启动,于是重新启动Apahce,在启动Apache的过程中并没有报错,启动完成后发现仍然没有httpd进程运行,由此看来,应该是Apache内容出现了问题。

  2、解决思路

  在判断是Apache的问题后,首先要看的是Apache的启动日志,在查看Apache的error日志后,发现了一个可疑输出,内容为:

  No space left device:mod_rewrite:could not create rewrite_log_lock Configuration Failed

  看到这个错误提示,感觉应该是磁盘空间耗尽导致的,于是赶紧查看系统所有磁盘分区,结果发现所有磁盘分区都还有很多可用空间,这有些奇怪了。

  Linux下对磁盘空间的占用分为三个部分:物理磁盘、inode节点磁盘空间和信号磁盘空间。通过检查服务器的物理磁盘空间,发现仍有很多剩余,因此被排除了物理磁盘空间的问题。接着通过“df -i”命令查看系统可用的inode节点,发现每个分区可用的inode还有很多,这样inode节点问题也被排除了,那么应该是信号量磁盘空间耗尽导致的。

  这里简单介绍了Linux信号量相关的知识,信号量是一种锁机制用于协调进程之间互斥的访问临界资源,以确保某种共享资源不被多个进程同时访问。Linux系统的信号量是用于进程间通信的。它有两种标准实现,分别是POSIX及System v,现在大多数Linux系统都实现了这两种标准。这两种标准都可用于进行线程间的通信,只是系统调用方式略有不同。

  Syetem v信号量通过系统调用semget来创建,通过linux命令ipcs即可显示进程间通信用的System v类型信号量及共享内存。

  POSIX信号量可用于线程和线程间通信,并可分为有名和无名两种。也可简单理解为是否保存在磁盘上。有名的信号量会以文件形式保存在/dev/shm下,因此可用于不相关的进程间通信,而无名信号量只能用于线程间和父子进程间通过。

  在对信号量有了简单了解后,可以发现Apaceh使用的进程间通信方式应该是Syqtem v,因此可以通过ipcs命令查看和解决这个问题了。

  3、解决问题

  在解决这个问题之前,首先查看下Linux系统默认信号量的设置值是多少,执行如下命令:

  [root@localhost ~]#cat /proc/sys/kemel/sem

  250 32000 32 128

  这四个输出值的含义如下:

  SEMMSL,此参数用于控制每个信号集的信号数。

  SEMMNS,此参数用于控制整个Linux系统中信号的数量。

  SEMOM,此参数用于控制每个semop系统调用可以执行的信号操作数。

  SEMMNI,此内核参数用于控制整个Linux系统中信号集的数量。

  接着通过ipcs命令查看httpd进程占用了多少信号量,执行如下命令:

  [root@localhost ~]#ipcs -s|grep daemon

  其中“daemon”是启动Apahce进程的用户,默认是daemon,也可能是nobody用户,根据实际环境而定。执行完此命令后,发现很多基于daemon的信号量输出,问题终于找到了。解决信息量耗尽的方法很简单,通过ipcrm命令即可,简单方法是执行如下命令组合:

  [root@localhost ~]#ipcs -s | grep nobody|perl -e 'while()'{@=split(^s+/)};print

  'ipcrm sem $a[1]'

  执行完上面这个命令后,再次启动Apache,然后查看是否有httpd进程启动,可以看到,此时httpd进程启动了,那么Apache也工作正常了。

  盛网科技http://www.33o***/,服务器租用/托管,高性能,高配置,高防护,高独享7x24小时售后服务,定制属于你的专属服务器。Q Q:724015997企业Q:4000900901电话:13924367540
东莞网站/软件服务相关信息
2023-09-15
注册时间:2017年04月11日
UID:380135
---------- 认证信息 ----------

查看用户主页