PHP - gc.max的生命周期和性能?

时间:2012-04-23 12:37:12

标签: php performance session garbage-collection

我想知道更高的gc.maxlifetime值是否会影响网站的效果?比方说2周(1209600秒)。

我之所以要问的原因是因为我的某些页面需要花费几分钟来加载之前非常快。我将值从默认的24分钟更改为2周,以便用户的会话数据和登录将是持久的。这是大约2周前,这让我相信高gc.maxlifetime可能是缓慢页面加载的问题。但它并不总是相同的页面。

PS:我正在迁移到基于cookie的持久登录系统,我认为它对性能更友好?

由于

3 个答案:

答案 0 :(得分:1)

gc.max_lifetime不应直接影响效果,因为它所做的就是设置会话是公平游戏删除的持续时间(虽然不能保证最终会被删除)

可能存在一些抵押品性能差异,因为每当会话GC启动时,会有更多的会话来检查是否有资格进行清理,因此需要更多时间对所有会话进行排序。那是因为你增加了会话的最短生命周期,因此在任何时候所有其他事情都是平等的,正在进行的会话比以前多。

您可以进行一项非常简单的检查:查看会话存储机制(默认情况下,这意味着系统临时目录中的文件),并查看当前存在多少个会话。如果它是文件系统会话,那么除非你有10K或更多,否则不应该有任何明显的性能下降;在任何情况下,“可见性能下降”都不会进入分钟范围(这是一个硬盘,它有多慢?)。

答案 1 :(得分:1)

我认为你不应该尝试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;
?>

祝你好运找到缓慢的部分。提示:如果有任何数据库查询,请多看一下。

答案 2 :(得分:1)

首先没有选项“gc.maxlifetime” - 你的意思是“session.gc_maxlifetime”;)

选项“session.gc_maxlifetime”定义垃圾收集(gc)进程不会删除会话数据的时间。 gc过程将按照“session.gc_divisor”&amp; “session.gc_probability合”。

如果您遇到问题,请查看会话数据的存储位置(会话保存处理程序)。比你应该优化该过程或禁用它并自己清理数据(cron)。

如果使用默认配置,PHP会将会话数据存储在本地硬盘上,这通常是瓶颈。

如此多地增加“session.gc_maxlifetime”的值会打开安全问题并简单地拖延您的问题。