gpt4 book ai didi

nginx - 为什么我的代码更改没有立即反射(reflect)出来?

转载 作者:搜寻专家 更新时间:2023-10-31 22:14:37 25 4
gpt4 key购买 nike

我正在维护一个大型 wordpress 站点,我试图通过在代码中添加跟踪语句来解决一个不相关的问题,这些语句只不过是对 error_log() 的调用。简而言之,我的服务器设置是一个文件服务器,它通过 nfs 共享网站的文档根目录。有 2 个运行 nginx+apc+php/fpm 的 Web 服务器。我直接在文件服务器上编辑 php 文件,当我从 Web 服务器查看文件时,我可以看到我的更改,但是当我跟踪错误日志时,我可以观察到我的更改没有立即反射(reflect)出来。我继续看到旧的跟踪语句,就好像我根本没有进行更改一样。

我的运行理论是代码被缓存在 apc (duh) 或客户端 nfs 缓存中(不太可能,因为我可以使用 vi 看到编辑)。我尝试通过使用运行 apc_clear_cache() 的脚本刷新 apc 缓存来缓解这种情况。此外,我已经重新启动了 nginx 和 php-fpm,希望能刷新旧的缓存 php 代码。这些方法都不起作用,我必须等待一个小时或更长时间才能看到我的代码更改反射(reflect)在日志中。

我正在排除故障的网站流量相当高,因此重新挂载 nfs 共享对我来说并不是一个真正的选择。我的假设是 apc 操作码缓存实际上并未清除,但我一直在使用 apc.php 观察统计信息,我确实看到在运行刷新脚本后缓存正在重建。我已经这样做了几天,解决一个简单的问题已经变成了一个巨大的头痛。任何人都可以提供任何关于其他事情的想法来查看或尝试使我的代码更改更直接吗?

最佳答案

一些想法:

  1. 如果您正在调整,暂时将 apc.stat 设置为 true 可能会有用;这意味着性能会受到轻微影响,但会强制 APC 在每次请求之前重新检查 opcache。

  2. 这是我刷新 APC 缓存的 shotgun 方法(强制使每个单独的文件失效)。

  3. FPM 是否始终是共享缓存(手册似乎如此说明);还是有更多缓存? (不确定!我对 FPM 不是很熟悉)。

    $info = apc_cache_info();    $files = $info['cache_list'];    $prefix = "/";    if (isset($_GET['PREFIX']))    {        $prefix = $_GET['PREFIX'];    }    $user = apc_cache_info("user");    $cachestore = array();    // save the user cache to an array    foreach ($user['cache_list'] as $info)    {        $cachestore[$info['info']] = apc_fetch($info['info']);    }    apc_clear_cache();    apc_clear_cache('user');    // Recache all the files that were in the opcache before..    foreach ($files as $file)    {        if (strpos($file['filename'], $prefix) === 0)        {            print $file['filename'] . " : ";            print apc_compile_file($file['filename']) ? "SUCCESS\n" : "FAILE             D\n";        }    }    foreach ($cachestore as $key => $value)    {        apc_store($key,$value);    }

关于nginx - 为什么我的代码更改没有立即反射(reflect)出来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8144425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com