我目前在更精确地性能方面遇到了一个巨大的问题:通过大量 I/O 在包含大量文件(+100.000)的平面会话文件夹上生成负载。
sessionfiles/htdocs 文件夹位于托管存储上 - 两个单独的服务器(在负载平衡器后面)通过 nsf-mount 使用这些文件(apache2),并同时访问相同的会话文件夹(以保持其持久性)。
不幸的是,该项目非常频繁,并且正在生成大量会话文件。即使 ans max_lifetime 为 2 小时,我们也生成了 +100.000 个会话文件,这对于 IO 节点来说已经非常重要了。
是否有可能将这些会话动态拆分为子文件夹?例如,所有带有 sess_1* 的会话文件都放入 /tmp/sessions/1,sess_2 放入 /tmp/sessions/2 等等?使用这种方法,存储/IO 节点只需处理每个文件夹约 10.000 个,这将加快垃圾收集并防止 IO 负载。
我从 PHP (session.save_path) 文档中找到了这段摘录:
http://de3.php.net/manual/en/session.configuration.php#ini.session.save-path
此指令有一个可选的 N 参数,用于确定您的会话文件将分布在的目录级别数。例如,设置为 '5;/tmp' 可能最终会创建一个会话文件和位置,如 /tmp/4 /b/1/e/3/sess_4b1e384ad74619bd212e236e52a5a174If 。为了使用 N,您必须在使用前创建所有这些目录。在 ext/session 中存在一个小的 shell 脚本来执行此操作,它称为 mod_files.sh,Windows 版本称为 mod_files.bat。另请注意,如果使用了 N 且大于 0,则不会执行自动垃圾收集,请参阅 php.ini 的副本以获取更多信息。此外,如果您使用 N,请务必将 session.save_path 括在“引号”中,因为分隔符 (;) 也用于 php.ini 中的注释。
有没有人以前在 php 中实现过这个,并且可以为我提供一些示例 php 代码来使用这个 mod_files.sh 处理子文件夹中的会话文件?
不幸的是,它的记录很差......