php的session文件过多导致inode用完,apache不能正常运行的问题

第一次遇到这个问题,挺棘手的。

一个程序由于大量用到了session,php的session的采用默认的形式保存到/tmp中,没有过多久发现服务器出现莫名其妙的错误,主机bash上(本地上!远程看不到)反复提示类似错误:

killed process 21034(apache2)

out of memory :kill process 1247 (apache2) score 28840 or a child.

这是第二次出现了,第一次出现同时处理的,直接把/tmp下 的文件清空,重启就好了,没有追究原因。

没想到没过多久又出现这个毛病,只能一个原因一个原因的分析了。

这里我提供以下一个解决方法:

1、使用内存来保存session

修改php.ini的配置文件

session.save_handler = files

修改为

session.save_handler = eaccelerator

前提是你已经安装了eaccelerator

2、使用session的分级目录

修改;session.save_path = "/tmp"

修改为

session.save_path = "2;/tmp/session"

表示使用/tmp/session目录下二级散列目录存储session

然后呢,php不会自动建立散列目录,需要手动创建

也就是说你需要手动创建如下文件夹,并给权限

/tmp/session/0/0/

/tmp/session/0/1/

/tmp/session/0/3/

tmp/session/0/4/

……………………

3、用自动清理session

/etc/cron.hourly/下新建了一个文件session

内容如下:

find /tmp/session -amin +180 -exec rm -rf {} \;

表示1小时清理一次,清理大于3个小时的session文件。

3

这篇文章还没有评论

发表评论