Nginx 为什么我的代码更改没有立即反映出来?

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

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

我的运行理论是,代码要么缓存在apc(duh)中,要么缓存在客户端nfs缓存中(不太可能,因为我可以通过vi看到编辑)。我试图通过使用运行apc_clear_cache()的脚本刷新apc缓存来缓解这种情况。此外,我重新启动了nginx和phpfpm,希望有什么东西能刷新旧的缓存php代码。这些方法都不起作用,我必须等待一个多小时才能看到日志中反映的代码更改

我正在排查的网站流量相当高,因此重新安装nfs共享对我来说不是一个真正的选择。我的假设是apc操作码缓存实际上并没有被清除,但我一直在用apc.php观察统计数据,我确实看到在运行flush脚本后重建缓存的样子。我已经做了几天了,解决一个简单的问题已经变成了一个巨大的头痛。有人能提供一些其他方面的想法来查看或尝试使我的代码更改更直接吗?

一些想法:

  • 如果您正在调整,临时将apc.stat设置为true可能会很有用;这意味着性能上会有一点损失,但会迫使APC在每次请求之前重新检查opcache

  • 这是我刷新APC缓存(强制每个文件失效)的鸟枪方法

  • FPM是否总是一个共享缓存(手册似乎是这么说的);还是有更多的缓存?(不确定!我对FPM不是很熟悉)

  • $info=apc_cache_info(); $files=$info['cache_list']; $prefix=“/”; 如果(isset($\u GET['PREFIX'])) { $prefix=$_GET['prefix']; } $user=apc_缓存_信息(“用户”); $cachestore=array(); //将用户缓存保存到阵列 foreach($user['cache_list']作为$info) { $cachestore[$info['info']]=apc_fetch($info['info']); } apc_清除_缓存(); apc_清除_缓存(“用户”); //重新缓存之前opcache中的所有文件。。 foreach($files作为$file) { if(strpos($file['filename',$prefix)==0) { 打印$file['filename']。“:”; 打印apc\u编译文件($file['filename'])?“SUCCESS\n”:“FAILE D\n”; } } foreach($cachestoreas$key=>$value) { apc_商店($key,$value); }
    我从未找到导致此问题的令人满意的原因,但我们选择从等式中删除NFS,我们的问题已经解决。感谢大家的帮助。

    为什么要直接在高流量的生产服务器上编辑文件?因为我正在排除的问题不会发生在沙盒环境中,仅在实时服务器上。因此,您正在清除apc缓存并在两台web服务器上重新启动nginx。。。您可以通过在PHP中插入一些不可见的HTML来缩小搜索范围。e、 g.
    如果在前端查看源代码时显示,则您知道新代码正在运行,您可以排除APC和nginx。是否只是缓冲了写入错误日志的内容,以便在跟踪日志时看到旧条目?是否正在运行WordPress的缓存模块?1。这已设置为true。说实话,我刚刚得知这一点,并计划在我解决这一问题后立即将其关闭。是的,fpm是唯一一个有共享缓存的。我完全关闭了apc,并验证了这不是问题2。缩进有问题,它没有显示脚本的前半部分 $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); }