网络安全检测|网络安全服务|网络安全扫描-香港墨客投资移动版

主页 > 业界资讯 > 网络安全预防措施

出了Linux故障找不到方法?看大牛简单、朴实的解决思路(3)

到这里问题就基本排查清楚了,解决这一类问题的方法有很多,最简单的方法就是关闭或者重启httpd进程,当然重启操作系统也可以。不过这些并不是最好的办法,对待这种进程不停对文件写日志的操作,要释放文件占用的磁盘空间,最好的方法是在线清空这个文件,具体可以通过如下命令完成:

# echo “ ” >/tmp/access_log 

通过这种方法,磁盘空间不但可以马上释放,也可以保障进城继续向文件写入日志,这种方法经常用于在线清理apache /tomcat/nginx等web服务产生的日志文件。

问题5:“too many open files”错误与解决方法

问题现象:这是一个基于java的web应用系统,在后台添加数据时提示无法添加,于是登陆服务器查看tomcat日志,发现如下异常信息,java.io.IOException: Too many open files

通过这个报错信息,基本判断是系统可以用的文件描述符不够了,由于tomcat服务室系统www用户启动的,于是以www用户登陆系统,通过ulimit –n 命令查看系统可以打开最大文件描述符的数量,输出如下:

$ ulimit –n  65535 

可以看到这台服务器设置的最大可以打开的文件描述符已经是65535了,这么大的值应该够用了,但是为什么提示这样的错误呢

解决思路,这个案例涉及ulimit命令的使用

在使用ulimit时,有以下几种使用方法:

1、 在用户环境变量中加入

如果用户使用的是bash,那么可以在用户目录的环境变量文件.bashrc或者.bash_profile中加入“ulimit –u128”来限制用户最多可以使用128个进程

2、 在应用程序的启动脚本中加入

如果应用程序是tomcat,那么可以再tomcat的启动脚本startup.sh中加入‘ulimit –n 65535’来限制用户最多可以使用65535个文件描述符

3、 直接在shell命令终端执行ulimit命令

这种方法的资源限制仅仅在执行命令的终端生效,在退出或者和关闭终端后,设置失效,并且这个设置不影响其他shell终端

解决问题:

在了解ulimit知识后,接着上面的案例,既然ulimit设置没有问题,那么一定是设置没有生效导致的,接下来检查下启动tomcat的www用户环境变量是否添加ulimit限制,检查后发现,www用户并无ulimit限制。于是继续检查tomcat启动脚本startup.sh文件是否添加了ulimit限制,检查后发现也没有添加。最后考略是否将限制加到了limits.conf文件中,于是检查limits.conf文件,操作如下

# cat /etc/security/limits.conf |grep www  www soft nofile 65535  www hard nofile 65535 

从输出可知,ulimit限制加在limits.conf文件中,既然限制已经添加了,配置也没有什么错,为何还会报错,经过思考,判断只有一种可能,那就是tomcat的启动时间早于ulimit资源限制的添加时间,于是首先查看下tomcat启动时间,操作如下

# uptime  Up 283 days  # pgrep –f tomcat  4667  # ps –eo pid,lstart,etime|grep 4667  4667 Sat Jul 6 09;33:39 2013 77-05:26:02 

从输出可以看出,这台服务器已经有283没有重启了,而tomcat是在2013年7月6日9点启动的,启动了将近77天,接着继续看看limits.conf文件的修改时间,

# stat /etc/security/limits.conf 

通过stat命令清除的看到,limits.conf文件最后的修改时间是2013年7月12,晚于tomcat启动时间,清楚问题后,解决问题的方法很简单,重启一下tomcat就可以了。

问题6:(Apache常见错误故障案例)”no space left on device “错误与解决方法

错误现象: 客户反映在执行”apachectl start “启动Apache是无报错信息,但是还是不能访问网页,客户的网站是基于Apache+PHP+mysql 的在线交易平台,听到客户描述的现象后,第一反应就是防火墙屏蔽了HTTP端口或selinux的问题,于是登陆服务器查看相关信息,从输出信息可以看出,防火墙所有的策略都处于开放状态,并未做出任何限制,而selinux也处于关闭状态,应该不是防火墙导致的。既然不是防火墙导致的,那么看看httpd进程是否存在及httpd端口是否正常启动

# ps –ef |grep httpd|grep –v “grep” |wc –l  0  # netstat –nultp |grep 80  # /usr/local/apache2/bin/apachectl start  # ps –ef |grpe httpd |grep –v “grep” |wc –l  0  (责任编辑:admin)