Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
安全限制PHP会话空间_Php_Performance_Session_Strace - Fatal编程技术网

安全限制PHP会话空间

安全限制PHP会话空间,php,performance,session,strace,Php,Performance,Session,Strace,我似乎在任何地方都找不到这些信息,所以我想我在这里问一下 目前,我已将PHP会话路径(session.save_path)设置为服务器硬盘上的一个文件夹 我创建了一个简单的PHP程序,如下所示: <?php echo "TEST"; ?> 然后我用strace执行它,strace日志中耗时最长的进程是shmdt(),当我匹配这些数字时,它引用了session.save\u路径中的一个sem文件 我可以尝试缓解这个问题的一种方法是为php会话文件创建一个ram磁盘,但我希望能够向

我似乎在任何地方都找不到这些信息,所以我想我在这里问一下

目前,我已将PHP会话路径(session.save_path)设置为服务器硬盘上的一个文件夹

我创建了一个简单的PHP程序,如下所示:

<?php echo "TEST"; ?>

然后我用strace执行它,strace日志中耗时最长的进程是
shmdt()
,当我匹配这些数字时,它引用了session.save\u路径中的一个sem文件

我可以尝试缓解这个问题的一种方法是为php会话文件创建一个ram磁盘,但我希望能够向php配置文件本身添加一个配置条目,以便php了解在删除旧条目之前,它有很多空间可以使用

我需要什么配置条目来完成此任务

如果可能,我可以使用哪些配置条目来消除
shmdt()
调用


我在PHP版本5.5.29中测试了我的脚本。

我知道您试图防止会话文件在会话文件夹(session.save_path)中存储过多

如果您有权访问PHP配置文件(PHP.ini),则必须将“session.gc_maxlifest”的值调整为所需的最大持续时间,以便从服务器上删除这些文件

PHP文档:

要为“RAM磁盘”分配空间,需要根用户访问服务器。如果这是您的情况,您必须执行以下操作:

<?php echo "TEST"; ?>
  • 为会话创建文件夹:
  • mkdir/var/sessions
  • 编辑“fstab”文件:
  • vi/etc/fstab
  • 创建映射到该文件夹的RAM磁盘条目:
  • 无/var/sessions tmpfs默认值,大小=50M 1 2
  • 将更改保存在“fstab”中

  • 安装新的RAM磁盘:

  • a山 注意:在“4”点中,我分配了50MB的RAM空间。必须在服务器RAM中分配可供用户使用的空间


    我希望这能有所帮助。

    所谓“服务器硬盘”,是指运行PHP的服务器吗?或者在nfs文件服务器上?是。一切都是在服务器上测试的,没有任何外部连接。(硬盘包含正在运行的php文件和会话文件夹)您使用的是默认会话处理程序吗?sem文件的名称是什么?您使用的是opcache吗?事实上,如果这是用
    shmdt
    标记的整个脚本,那么它似乎不太可能与会话相关,因为您实际上没有启动会话(因此会话处理支持不应该启动)。这很奇怪,因为shmdt只在三个地方使用:opcache、shmop和sysvshm扩展。你有没有可能得到调用shmdt的任何东西的堆栈跟踪?我根本没有使用opcache,但是我已经用PHP安装了shmop扩展。这会导致吗?我已经在服务器上安装了ram驱动器,并且处于活动状态。虽然session.gc_maxlife可以最大限度地降低磁盘空间过大的风险,但我觉得有一个比冒险更好的答案(如果磁盘使用量超过x字节,可能会出现某种恐慌/减少文件设置) vi /etc/fstab none /var/sessions tmpfs defaults,size=50M 1 2 mount -a