`

session_path存放大量session会给服务器带来效率问题

    博客分类:
  • PHP
阅读更多

转自: http://hi.baidu.com/shher/blog/item/0cf2468c51f8d315b21bbaef.html

早上流量有点大,网站流量大概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++) {
       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处理效率明显好转。

分享到:
评论

相关推荐

    php session实现多级目录存放实现代码

    为了解决这个问题,可以通过配置PHP的session.save_path选项来实现多级目录存放Session文件,以此来提高性能。 php.ini文件是PHP的配置文件,其中可以设置很多影响PHP行为的选项。session.save_path就是其中一个,...

    php错误代码总结.pdf

    session.save_path指定了存放session数据的目录。错误信息“Warning: session_start(): open(/tmp/sess_7d190aa36b4c5ec13a5c1649cc2da23f,O_RDWR) failed”提示无法打开或者写入指定的session文件,这可能是因为...

    PHP实现多服务器session共享之NFS共享的方法

    其中,有一种方法就是利用NFS来共享session,如果session量比较大并且所有的session文件都在同一个子目录下的话,那么可能会由此带来很严重的负载问题,甚至导致网站无法使用。本文就是对这个方案做一下详细的解说...

    PHP程序设计-3期(KC016) 3.12.1 session课后习题.doc

    - **session**:数据存储在服务器端,具体来说,PHP会将session数据序列化后保存在服务器的指定目录(默认为`session.save_path`配置项指定的`session_dir`)。这样可以保护用户数据不被客户端直接访问,提高了安全...

    PHP中session使用方法详解第1/2页

    Session数据不会暴露给用户,用户也无法篡改,因此避免了cookie可能存在的数据篡改风险。PHP中的session使用相对简单,通常不需要对php.ini文件进行配置即可使用。 在PHP中使用session之前,必须先调用session_...

    服务器性能变慢 c盘temp文件夹存在大量sess开头文件的问题原因及解决

    3. ** session多级目录存放**:为了优化大量session文件的读写效率,可以启用session多级目录存放。这通过在`session.save_path`中添加一个数字N来实现,如`session.save_path = "2;/data/session_tmp"`。这将创建一...

    详解php设置session(过期、失效、有效期)

    Session存储通常在服务器上进行,但session ID则通过cookie或者URL传递给客户端。因为session ID是区分用户的关键,所以保护session ID的安全也非常重要。 在php.ini文件中设置session 在php.ini文件中可以对...

    PHP cookie与session会话基本用法实例分析

    由于cookie中的信息是暴露给客户端的,因此它的安全性不如session。下面将详细介绍这两种技术的基本用法,并结合实例进行分析。 首先,我们来了解cookie的基本使用方法。在PHP中,我们可以使用setcookie()函数来...

    CI框架Session.php源码分析

    - `sess_table_name`:用于存放session数据的数据库表名,未设置时为空字符串。 - `sess_expiration`:session的过期时间,默认为7200秒,即两小时。 - `sess_expire_on_close`:默认为FALSE,表示浏览器关闭后...

    cookie和session

    - **Value (值)**: 存储的具体信息,不建议存放中文,因为可能会遇到编码问题。 - **Path (路径)**: 表示Cookie适用的路径范围。例如,如果Path被设置为“/day10_00_cookie/servlet/”,那么只有在这个路径下的页面...

    Tomcat集群配置,实现session共享

    在Java Web开发中,Tomcat作为一款广泛使用的Web服务器,其集群配置和Session共享是实现高可用性和负载均衡的关键技术之一。 #### 二、环境准备 本文介绍的案例基于以下环境: - **JDK版本**:1.8.0_131 - **Tomcat...

    PHP实现cookie跨域session共享的方法分析

    2. **文件系统共享**:配置所有服务器共享同一文件系统,Session数据存放在统一目录。 3. **Memcached或Redis**:利用缓存服务器存储Session数据,各服务器通过网络访问。 4. **自定义Session Handler**:实现自己的...

    php环境配置自己写的 文档

    对于session,可以设置`Session.save_path`来定义session数据的存储位置,例如`Session.save_path="D:/Apache/tmp"`。同时,通过`Session.auto_start=1`开启session的自动启动,这样无需在代码中手动启动和关闭...

    oracle 11g 服务器创建

    ### Oracle 11g 服务器创建及数据库安装详解 #### 一、系统准备与配置 在部署Oracle 11g数据库服务器之前,需要对Linux操作系统进行必要的调整,以确保其能够满足Oracle的要求。 ##### 1. 修改操作系统核心参数 ...

    linux下安装oracle_11G

    ### Linux下安装Oracle 11g服务器详细指南 #### 安装环境 - **Linux服务器**: CentOS 6.4 + 64位 - **Oracle服务器**: Oracle 11g R2 64位 #### 系统要求 **1. 修改操作系统核心参数** 在进行Oracle 11g的安装前...

    Linux下安装Oracle11g服务器(详细图解

    在Linux环境下安装Oracle 11g服务器是一项技术性较强的任务,需要满足一定的系统要求并进行一系列的系统配置。本文将详细介绍在SuSe10 SP2 64位系统上安装Oracle 11g R2 64位版本的步骤。 首先,确保你的Linux系统...

    egg服务器架构文档.docx

    ### Egg.js 服务器架构知识点详解 #### 一、Egg.js 框架简介与特点 Egg.js 是由阿里巴巴开发的一款专为大型企业级应用设计的Node.js框架。它秉承“约定优于配置”的设计理念,简化了开发流程,提高了团队协作效率...

Global site tag (gtag.js) - Google Analytics