大量php session临时文件带来的服务器效率问题

早上流量有点大,网站出口流量大概5M左右,访问质量却不太好,web响应比较慢,切系统负载很高。

检 查了下各web节点,所有web服务器的httpd线程均达到满负荷,很奇怪。因为所有web节点都通过nfs来共享session目录来达到session的一致性,检查了下nfs文件服务器,IO读写比较大,检查了session_tmp目录,发现session目录临时文件达到 70000多个,初步判断也许是因为一级目录下文件过多带来的IO性能下降。

以前没有想过session存放的效率问题,今天由此想到了session多级存放的问题,来解决一个目录下session文件过多带来的读写效率问题,查了下php.net其实php在配置中已经给出了有关选项。

php.net上的说明:http://cn.php.net/manual/zh/ref.session.php

session.save_path 定义了传递给存储处理器的参数。如果选择了默认的 files 文件处理器,则此值是创建文件的路径。默认为 /tmp。参见 session_save_path()。 此指令还有一个可选的 N 参数来决定会话文件分布的目录深度。例如,设定为 '5;/tmp' 将使创建的会话文件和路径类似于

/tmp/4/b/1/e/3/sess_4b1e384ad74619bd212e236e52a5a174If。 要使用 N 参数,必须在使用前先创建好这些目录。在 ext/session 目录下有个小的 shell 脚本名叫 mod_files.sh 可以用来做这件事。此外注意如果使用了 N 参数并且 N 大于 0,那么将不会执行自动垃圾回收,更多信息见 php.ini。另外如果用了 N 参数,要确保将 session.save_path 的值用双引号 "quotes" 括起来,因为分隔符分号( ;)在 php.ini 中也是注释符号。

session.save_path string

在定义session.save_path中可以定义多级存放的路径,修改php.ini

session.save_path = "2;/data/session_tmp"

将session文件分成两级存放,即/data/session_tmp/4/b/sess_4b1e384ad74619bd212e236e52a5a174If,取前两位字符,但是php并不生成目录,需要自己手工生成,所以写了个脚本来生成初始的目录。

引用

<?php
$string = '0123456789abcdefghijklmnopqrstuvwxyz';
$length = strlen($string);
for($i = 0; $i < $length; $i++) {
  for($j = 0; $j < $length; $j++) {
   func_mkDir('/session_tmp/'.$string[$i].'/'.$string[$j]);
  }
}
?>

session目录分级处理之后,IO处理值增加,http进程降低,web处理效率明显好转

时间: 2024-10-02 20:35:20

大量php session临时文件带来的服务器效率问题的相关文章

SPEC2016亚洲峰会召开在即,中国市场服务器效率首度解密

ZD至顶网服务器频道 09月30日 新闻消息(文/邹大斌): 10月27日至28日, SPEC 2016亚洲峰会(SPEC 2016 Asia Summit)将于北京召开.SPEC 2016亚洲峰会由SPEC(Standard Performance Evaluation Corporation,标准性能评估组织)主办,大会以"发现真实的计算效率"为主题,届时,来自全球的企业级IT专家和学者将共同探讨计算性能.效率的评估模型与规范.测试方法的制定及实际应用:分享中国服务器效率的真实状况

深入Memcache的Session数据的多服务器共享详解_php技巧

一相关介绍1.memcache + memcache的多服务器数据共享的介绍,请参见http://www.guigui8.com/index.php/archives/206.html2.session机制:session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息.当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识- 称为sessionid,如果已包含一个sessionid

云计算环境 如何衡量服务器效率

从基础架构层面来看,一个有效率的云计算环境,必然也要一个有效率的服务器.而服务器的效率目前主要体现在两方面,一方面是服务器自身的工作效率,也就是利用率和执行效率. 服务器利用率是关键 提升服务器的利用率,一般来说是工作效率的主要体现.原因很简单:如果一台服务器,性能再好,其利用率低下,那么这台服务器的工作效率也就很低.从成本上看,我们也希望服务器工作在满负荷状态,而不是总在空闲状态. 那么如何提升服务器的利用率呢?我们需要先分析一下服务器利用率低的形成原因.首先是没有那么多的工作负载--这就牵扯

提高IIS网站服务器效率八法

以下是提高IIS 5.0网站服务器的执行效率的八种方法: 1. 启用HTTP的持续作用可以改善15~20%的执行效率. 2. 不启用记录可以改善5~8%的执行效率. 3. 使用 [独立] 的处理程序会损失20%的执行效率. 4. 增加快取记忆体的保存文档数量,可提高ActiveServer Pages之效能. 5. 勿使用CGI程式 6. 增加IIS 5.0电脑CPU数量. 7. 勿启用ASP侦错功能. 8. 静态网页采用HTTP 压缩,大约可以减少20%的传输量. 简单介绍如下 1.启用HTT

提高IIS网站服务器效率八法(1)

iis|服务器 1. 启用HTTP的持续作用可以改善15~20%的执行效率. 2. 不启用记录可以改善5~8%的执行效率. 3. 使用 [独立] 的处理程序会损失20%的执行效率. 4. 增加快取记忆体的保存文档数量,可提高ActiveServer Pages之效能. 5. 勿使用CGI程式 6. 增加IIS 5.0电脑CPU数量. 7. 勿启用ASP侦错功能. 8. 静态网页采用HTTP 压缩,大约可以减少20%的传输量. 简单介绍如下 1.启用HTTP的持续作用 启用HTTP的持续作用(Ke

php实现session多域名多服务器共享session_id

首先验证的时候产生一个sessionid;    代码如下 复制代码 <?php Session_start(); $sessionId = session_id();//得到sessionid   //将session下发给客户端 ......... ?> 客户端携带sessionid这个变量来请求数据    代码如下 复制代码 <?php   Session_id('$sessionid');//注意这个时候session_id()这个函数是带有参数的 Session_start()

8种方法提高Win2000 IIS服务器效率

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   微软关于"Windows 2000平台"的定义,包括了Windows 2000 Professional 和Windows 2000 Server前后台的集成,二者齐心协力产生碰撞的火花,为用户创造了比单个产品更多的价值.简单来说,Windows 2000平台是: 一个功能强大的可靠的7X24的计算平台:在电子商务时代,企业需要一个功能强大而

提高IIS网站服务器效率的8个方法_win服务器

1. 启用HTTP的持续作用可以改善15~20%的执行效率. 2. 不启用记录可以改善5~8%的执行效率. 3. 使用 [独立] 的处理程序会损失20%的执行效率. 4. 添加快取记忆体的保存文档数量,可提高ActiveServer Pages之效能. 5. 勿使用CGI程式 6. 添加IIS 5.0电脑CPU数量. 7. 勿启用ASP侦错功能. 8. 静态网页采用HTTP 压缩,大约可以减少20%的传输量. 简单介绍如下 1.启用HTTP的持续作用 启用HTTP的持续作用(Keep-Alive

SPEC基准测试工具可提升服务器效率测算

作为性能基准测试标准的SPEC基准开发了一种工具包来帮助制造商更加精确的测算服务器的能效. 此前推出测试版的服务器能源级别工具将被美国http://www.aliyun.com/zixun/aggregation/30992.html">环境保护署用于能源之星的服务器计划,此举意在帮助企业用户在制定服务器采购决策是来甄别最具能效的服务器. 随着数据中心能源成本不断攀升,节能减排已经成为企业用户为止奋斗的目标.尽管厂商为了竞争使出浑身解数,但是测算新设备的能效并非易事. 两年前推出的首个能源