session.save_path目录大量session临时文件带来的服务器效率问题
2013-05-14 09:55
351 查看
如果访问量大,可能产生的 SESSION 文件会比较多,这时可以设置分级目录进行 SESSION 文件的保存,效率会提高很多,设置方法为:session.save_path="N;/save_path",N 为分级的级数,save_path 为开始目录。当写入 SESSION 数据的时候,PHP 会获取到客户端的 SESSION_ID,然后根据这个 SESSION ID 到指定的 SESSION 文件保存目录中找到相应的 SESSION 文件,不存在则创建之,最后将数据序列化之后写入文件。 检查了下各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并不生成目录,需要自己手工生成,所以写了个脚本来生成初始的目录。
附上一个创建二级文件夹包的代码。
session目录分级处理之后,IO处理值增加,http进程降低,web处理效率明显好转
以前没有想过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++) { createfolder('/session_tmp/'.$string[$i].'/'.$string[$j]); } } function createfolder($path) { if (!@file_exists($path)) { createfolder(@dirname($path)); @mkdir($path, 0777); } //return $this -> createfolder; } ?>
session目录分级处理之后,IO处理值增加,http进程降低,web处理效率明显好转
相关文章推荐
- 大量session临时文件带来的服务器效率问题
- 大量php session临时文件带来的服务器效率问题
- windows 服务器注意windows的temp临时目录(temp文件过大问题)
- asp.net postedFile.SaveAs和SaveAs,解决了本地查看excel找不到System.IO.Path.GetFileName文件问题
- MyEclipse中建立的jsp文件中<base href="<%=basePath%>">可能会带来的问题.
- 服务器性能变慢 c盘temp文件夹存在大量sess开头文件的问题原因及解决
- Myeclipse中文件已经上传到服务器目录下,文件也没有被占用,但是页面中无法读取和使用问题的解决方法
- 设置多级目录保存session临时文件
- Apache服务器运维笔记(6)----目录 文件 网络容器的安全问题
- 解决“您已经更改系统默认的系统临时文件目录……”问题
- Axis生成大量临时文件问题
- [MFC] FTP 遍历服务器目录文件卡住的问题
- CKEditor+CKFinder服务器临时文件存储路径的问题
- 解决android模拟器临时文件占用大量C盘容量问题
- 禁用生成8.3字符长文件名解决单目录存储大量文件写入性能下降问题
- [MFC] FTP 遍历服务器目录文件卡住的问题
- A网站引用B服务器虚拟目录文件导致:网站部署到IIS7上出现HTTP 错误 500.19(由于权限不足而无法读取配置文件)的问题
- 在servlet 中使用 request.getSession().getServletContext().getRealPath("upload/" ); 获取不到 tomcat 服务器目录
- axis2 webservice服务,在服务器端产生大量临时文件问题
- 解决R语言临时文件目录的问题(tempdir、tempfile)