无需清除 mod_cache_socache 缓存即可正常重启 Apache 吗?

无需清除 mod_cache_socache 缓存即可正常重启 Apache 吗?

我最近mod_cache_socache在 Apache 上启用并创建了一个大内存缓存

不幸的是,由于 logrotate 在午夜时分优雅地重启了 Apache,这似乎会刷新缓存,因此似乎无法将任何内容缓存超过一天

我希望缓存由 Apache 主进程“拥有”,当完成正常重启时,主进程不会重新启动,而是重新启动所有子进程。但看起来缓存还是被清除了。

进行进一步的测试,手动一次终止一个子进程并让 Apache 重新启动它们,我可以在一定程度上避免清除缓存,但其中一个子进程似乎总是“承重”,终止它会导致所有其他子进程重新启动和清除缓存。

答案1

我没有办法持久化 mod_cache_socache,因为它本质上被设计为在重启时被清除而不是持久化。但是,您可以考虑的一种替代方案是mod_cache_disk在 Apache 中使用它进行缓存。虽然它将缓存数据存储在磁盘上,但现代操作系统会自动将经常访问的文件缓存在内存中。这意味着:

  1. 持久性:即使服务器重启后,您的缓存仍然保持不变。
  2. 速度:由于操作系统文件缓存,经常访问的缓存文件直接由系统 RAM 提供。

或者,如果您不想将其保存在磁盘上,也可以使用 RAM 磁盘作为缓存存储位置。这样,服务器完全重启后,缓存将被清除。

答案2

与其每天重新加载 apache,为什么不改变日志的工作方式 - 不要直接记录到磁盘,而是通过 Syslog 记录,或者使用管道日志。

根据“管道日志”部分https://httpd.apache.org/docs/2.4/logs.html“管道日志的一个重要用途是允许日志轮换而无需重新启动服务器。Apache HTTP Server 包含一个名为 rotatelogs 的简单程序,用于此目的。例如,要每 24 小时轮换一次日志,您可以使用:

  CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common

相关内容