检
查了下各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++) {
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.save_path`所指向的路径是否正确且存在。其次,确保在调用`session_start()`前没有任何输出。最后,根据具体情况调整`php.ini`文件中的配置项,并重启服务器以使...
下文来为各位介绍PHP设置session定期自动清理的例子了,因为session默认是15分钟自动把变量给清除内存了,但有一些时间并不生效了,下面我们就来看看... session.save_path = "N;/path" ; session.save_path = "N;MODE;
首先,要理解PHP默认的SESSION管理机制是使用session.save_handler配置项指定的处理器来读写存储在session.save_path配置项指定的目录下的SESSION数据文件。但是当应用部署在多个服务器上时,每个服务器会使用独立的...
session.save_path = sess保存路径 但是,如果网站用户很多的话,session 的访问将势必影响网站的速度。因为文件的读取速度是很低的。 众所周知,memcache 作为内存缓存服务器,通过哈希算法,把数据以key->value的...
为了解决这个问题,可以通过配置PHP的session.save_path选项来实现多级目录存放Session文件,以此来提高性能。 php.ini文件是PHP的配置文件,其中可以设置很多影响PHP行为的选项。session.save_path就是其中一个,...
- **session.save_path**:设置 Session 文件的保存路径。 - **session.gc_probability** 和 **session.gc_divisor**:这两个选项控制 Session 垃圾回收的频率。比如,如果设置 `session.gc_probability = 1` 和 `...
2. 或者在某个目录下使用 .htaccess 文件设置:php_value session.save_handler "memcache"; php_value session.save_path "tcp://127.0.0.1:11211"。 3. 或者在某个应用中使用 ini_set 函数设置:ini_set("session....
首先,让我们关注`session.save_path`配置。在`php.ini`文件中,这一项用于指定Session数据的存储路径。`N;/path`这里的`N`表示目录的级数,`/path`是实际的存储路径。例如,`session.save_path = "2;C:/Temp"`意味...
- **session.save_path**:指定 Session 文件保存的路径,默认值依赖于操作系统。 - **session.use_cookies**:是否启用 Cookie 来传递 Session ID,默认为 1。 - **session.cookie_path**:定义 Cookie 的路径,...
可以通过`session.save_path`配置改变存储位置,例如: ```ini session.save_path = "/var/sessions" ``` #### 问题 5:Session超时 你可以通过`session.gc_maxlifetime`设置session过期时间(单位为秒)。例如,...
在 php.ini 中找到 session.save_path 将值设置为 session.save_path = ‘3;/tmp/session’; 即可开启三级目录保存session。但是php不会自动生成目录结构,这时可以借助源码包 ext/session 目录下的 mod_files.sh 来...
这里,`session.save_handler`指定session的处理方式为memcache,`session.save_path`定义了memcache服务器的地址和端口。 3. **session配置优化**: 为了提高session存储的效率,可以调整session的过期时间、...
请注意,如果你的session数据存储在非标准路径,如自定义的`session.save_path`,则需要自行处理过期session文件的删除,因为PHP的内置GC可能无法覆盖到这些文件。可以使用定时任务或者脚本定期清理过期的session...
session.save_path = "tcp://server1:11211;tcp://server2:11211;tcp://server3:11211" ``` 这里,`save_path`参数指定了memcache服务器的地址和端口。 3. **session管理**:由于memcache本身不处理session过期...
文件中提到的解决办法是确保session.save_path设置为一个有效的、有相应读写权限的目录,如示例中的“session.save_path="c:/tmp"”。 5. session的其他函数session_unset() 和 session_destroy() session_unset()...
session.save_path = tcp://127.0.0.1:6379 方法二: 直接在代码中加入以下内容: ini_set(session.save_handler, redis); ini_set(session.save_path, tcp://127.0.0.1:6379); 注:如果配置文件redis.conf里设置...
2. **权限问题**:如果session.save_path指向的目录没有写权限,PHP无法写入文件,因此会导致错误。确保PHP用户对指定目录有读写权限是解决问题的关键。 3. **空间不足**:存储session数据的目录可能已满,无空间可...
当然要写先安装php的扩展,可参考这篇文章:Redis及PHP扩展安装修改php.ini的设置复制代码 代码如下:session.save_handler = redissession.save_path = “tcp://127.0.0.1:6379″修改后重启php-fpm或nginx,phpinfo...
此外,还需要设置`session.save_path`来指定连接到的Memcache服务器地址。以下是在不同场景下的配置方法: 1. **全局设置**:在`php.ini`中添加如下配置: ```ini session.save_handler = memcache session.save...
这可以通过设置多个服务器地址在`session.save_path`中实现。 此外,为了优化性能,可以考虑使用PHP的session缓存限制器(session.cache_limiter),例如设置为"none"以禁用HTTP缓存头,避免不必要的HTTP往返。 ...