返回列表 发帖

[软件故障] 服务器变慢 C:Windows\temp文件夹存在大量sess开头文件的原因及解决

使用Windows服务器的朋友可能会发现如果很久不重启服务器就会发现系统越来越慢了,重启动后问题又可以解决了,个人分析服务器越来越慢的原因是temp/sess_垃圾文件过多导致的,我们只要清理这些垃圾文件即可不需重启服务器。




现在只能手工定时清理并分多级目录存放.至少可以缓解i/o压力.下面给个方法,可以用系统计划任务功能.每周运行一次.清空七天前的cookie

一,首先用php自动创建类似这种目录/1/b/或a/1/ 这种以数字和字母缓存的二级目录.php语句如下

代码如下复制代码

<?php
error_reporting(E_ALL & ~E_NOTICE);
$string = ’0123456789abcdefghijklmnopqrstuvwxyz’;
$length = strlen($string);
for($i = 0; $i < $length; $i++) {
for($j = 0; $j < $length; $j++) { createfolder(‘D:/PC_webserver/phproot/v8/data/’.$string[$i].’/’.$string[$j]);
}
}
function createfolder($path) {
if (!file_exists($path)) {
createfolder(dirname($path)); //回路径中的目录部分
mkdir($path, 0777);
}

}
?>

然后,修改服务器上的php.ini文件.搜索session.save_path 这句

修改为session.save_path = “2;D:/tmp/sess”

这句表示,session缓存放在d盘的tmp/sess目录中2级目录中.然后你把上面的文件产生的多级目录复制到D:/tmp/sess,最后形成类似这种目录结构

D:/tmp/sess/m/5/

然后sess就自动生成在里面了.当然,这样分级后,系统就没法自动清理这种垃圾文件了.要手工才行.

代码如下复制代码

@echo off
echo 正在清除文件,请稍等……
echo y|  forfiles /p D:/tmp/sess /s /d -7 /c “cmd /c del @path”
echo 清除系统LJ完成!

把上面内容复制在txt记事本中保存.并修改后缀为.bat ,放计划任务中运行.本句含义是,搜索D:/tmp/sess这个目录,echo y|,表示让你确认时,命令直接选择yes./s表示包含所有子目录,d -7 表示7天前的文件,/c表示要执行的命令,注意加双引号,del表示清空前面的目录.如果增加一句m/ 如后面这句,就表示只删除rar为后缀的文件.否则是删除所有.

代码如下复制代码

echo  y| forfiles /p D:/tmp/sess /s /m *.rar /d -7 /c “cmd /c del @path”

下面是php.ini中给出的一种解释

这个秒数之后,存储的数据将被视为“垃圾”,
清理垃圾收集过程。
session.gc_maxlifetime = 1440

注意:如果您使用的是存储会话文件的子目录选项
(见上述session.save_path的),那么垃圾收集不*不*
自动发生。您将需要做你自己的垃圾
收集,通过一个shell脚本,cron项,或其他一些方法。
例如,下面的脚本将是相当于
设置session.gc_maxlifetime 1440(1440秒= 24分钟):
CD /路径/ /节;发现CMIN +24 | xargs的RM

欢迎光临:逐梦论坛

返回列表

Powered by Discuz! 7.2   论坛QQ群:逐梦论坛群

© 2001-2021 Comsenz Inc. 鲁公网安备 37120302000001号