0

我想知道更高的 gc.maxlifetime 值是否会影响站点的性能?假设 2 周(1209600 秒)。

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

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

谢谢

4

3 回答 3

1

gc.max_lifetime不应该直接影响性能,因为它所做的只是设置会话是公平游戏删除的持续时间(尽管不能保证它何时最终会被实际删除)。

可能存在一些附带的性能差异,因为每当会话 GC 启动时,它将有更多的会话来检查是否有资格清理,因此需要更多时间来整理所有这些会话。那是因为您增加了会话的最短生命周期,因此在任何时候所有其他条件都相同的情况下,正在进行的会话比以前多。

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

于 2012-04-23T12:45:27.560 回答
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;
?>

祝你好运找到缓慢的部分。提示:多看一下您的数据库查询(如果有的话)。

于 2012-04-23T12:46:45.170 回答
1

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

选项“session.gc_maxlifetime”定义了垃圾回收 (gc) 进程不会删除会话数据的时间。gc 进程将按照“session.gc_divisor”和“session.gc_probability”定义的频率启动。

如果你有问题,你应该看看你的会话数据将被存储在哪里(会话保存处理程序)。比您应该优化该过程或禁用它并自己清理数据(cron)。

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

如此增加“session.gc_maxlifetime”的值会引发安全问题,只会拖延您的问题。

于 2012-04-23T12:57:59.570 回答