【发布时间】:2016-01-15 03:27:13
【问题描述】:
我似乎无法在任何地方找到此信息,所以我想我在这里问。
目前我将我的 PHP 会话路径 (session.save_path) 设置为服务器硬盘上的一个文件夹。
我创建了一个简单的 PHP 程序,如下所示:
<?php echo "TEST"; ?>
然后我用 strace 执行它,strace 日志中耗时最长的进程是shmdt(),当我匹配数字时,它引用了 session.save_path 中的一个 sem 文件。
我可以尝试缓解此问题的一种方法是为 php 会话文件创建一个 ram 磁盘,但我希望能够向 PHP 配置文件本身添加一个配置条目,以便 PHP 了解它有这么多的空间来在删除旧条目之前使用。
我需要什么配置条目来完成这个?
如果可能,我可以使用哪些配置条目来消除shmdt() 调用?
我在 PHP 5.5.29 版本中测试了我的脚本。
【问题讨论】:
-
“服务器硬盘”是指运行 PHP 的服务器吗?还是在 nfs 文件服务器上?
-
是的。一切都在服务器上进行了测试,没有连接到任何外部。 (硬盘包含正在运行的 php 文件以及会话文件夹)
-
您使用的是默认会话处理程序? sem 文件的名称是什么?你在使用 opcache 吗?
-
实际上,如果这是用
shmdt标记的整个脚本,那么它似乎不太可能与会话相关,因为您实际上并没有开始会话(所以会话不应启动处理支持)。这很奇怪,因为shmdt只在三个地方使用:opcache,以及 shmop 和 sysvshm 扩展。您是否有机会获得调用shmdt的堆栈跟踪? -
我根本没有使用 opcache,但我确实安装了 PHP 的 shmop 扩展。这会导致它吗?
标签: php performance session strace