我想知道更高的 gc.maxlifetime 值是否会影响站点的性能?假设 2 周(1209600 秒)。
我问的原因是因为我的一些页面需要几分钟才能加载,这在以前非常快。我将值从默认的 24 分钟更改为 2 周,以便用户的会话数据和登录将保持不变。这是大约 2 周前,这让我相信高 gc.maxlifetime 可能是页面加载缓慢的问题。但它并不总是相同的页面。
PS:我正在转向基于 cookie 的持久登录系统,我认为它对性能更友好?
谢谢
我想知道更高的 gc.maxlifetime 值是否会影响站点的性能?假设 2 周(1209600 秒)。
我问的原因是因为我的一些页面需要几分钟才能加载,这在以前非常快。我将值从默认的 24 分钟更改为 2 周,以便用户的会话数据和登录将保持不变。这是大约 2 周前,这让我相信高 gc.maxlifetime 可能是页面加载缓慢的问题。但它并不总是相同的页面。
PS:我正在转向基于 cookie 的持久登录系统,我认为它对性能更友好?
谢谢
gc.max_lifetime
不应该直接影响性能,因为它所做的只是设置会话是公平游戏删除的持续时间(尽管不能保证它何时最终会被实际删除)。
可能存在一些附带的性能差异,因为每当会话 GC 启动时,它将有更多的会话来检查是否有资格清理,因此需要更多时间来整理所有这些会话。那是因为您增加了会话的最短生命周期,因此在任何时候所有其他条件都相同的情况下,正在进行的会话比以前多。
您可以进行一个非常简单的检查:查看会话存储机制(默认情况下,这意味着系统临时目录中的文件)并查看当前存在多少会话。如果是文件系统会话,那么除非您有 10K 或更多,否则不应有任何明显的性能下降;无论如何,“可见的性能下降”永远不会爬到分钟范围内(它是一个硬盘,它有多慢?)。
我认为你不应该尝试 gc.maxlifetime 设置。一般来说,垃圾收集器是一个非常轻量级的进程。我认为您应该尝试找出页面缓慢的原因。您可以通过在某些代码集之间添加计时器来做到这一点。然后看看你的代码哪一部分是慢的。
例如:
<?php
$start = microtime( true );
/* code block A */
$blockA = microtime( true ) - $start;
$start = microtime( true );
/* code block B */
$blockB = microtime( true ) - $start;
// etc.
/**
* At the end of your script, you can use the times and
* print them to the screen, or log them to a file.
*/
echo '<pre>' . PHP_EOL;
echo 'Block A took '. round( $blockA, 2) .' seconds ' . PHP_EOL;
echo 'Block B took '. round( $blockB, 2) .' seconds ' . PHP_EOL;
echo '</pre>' . PHP_EOL;
?>
祝你好运找到缓慢的部分。提示:多看一下您的数据库查询(如果有的话)。
首先没有选项“gc.maxlifetime” - 你的意思是“session.gc_maxlifetime”;)
选项“session.gc_maxlifetime”定义了垃圾回收 (gc) 进程不会删除会话数据的时间。gc 进程将按照“session.gc_divisor”和“session.gc_probability”定义的频率启动。
如果你有问题,你应该看看你的会话数据将被存储在哪里(会话保存处理程序)。比您应该优化该过程或禁用它并自己清理数据(cron)。
如果您使用默认配置 PHP 将会话数据存储在本地硬盘上,这通常是瓶颈。
如此增加“session.gc_maxlifetime”的值会引发安全问题,只会拖延您的问题。