tl; dr:用户执行某些操作后可能出现的Drupal页面执行时间不一致(可能与DB写入有关)。
我们有一个复杂的Drupal站点在相当标准的LAMP VPS设置上运行。除此之外,我们使用规则来提供大量自定义功能,以及用户关系,有机组和自定义模块。 PHP在Apache(mod_php)下运行,启用了MemCache和APC(虽然首次发现此问题时未启用APC。)
问题在于:经历了不一致的页面加载时间(有时好 - 200ms,有时只有几乎不可接受--4,000ms,有时令人憎恶地不可接受 - 20,000ms)我们编写了一个计时器来显示页面上的自定义PHP执行时间。我们看到的时间是可以接受的;在非常简单的页面上以及由于用户在上一页上的操作而发生大量后端处理的页面上。但是,间歇性的页面加载问题仍然存在 - 系统有时需要15秒才能为页面提供服务(时间到第一个字节),即使在很短的时间内完成了处理。
事实上,我们能够看到Drupal正在以其他方式快速处理代码;例如,在触发规则的用户看到确认页面之前,电子邮件(由规则触发)将在收件箱中到达十秒或更长时间!同样,当规则操作或用户关系导致用户对象的自定义字段发生更改时,当用户的浏览器仍在等待数据时,管理员可以看到该更改。
我们能够始终如一地预测这些长页面加载时间何时会发生:
仅在用户执行了特定于个人的操作后,例如确认新的“朋友”(通过用户关系),执行仅适用于某个组成员的操作(通过规则/有机组)或导致我们的一个自定义模块对用户对象执行操作的原因。一般网站导航通常显示正常。
无论涉及的模块数量或组合(规则和/或OG和/或UR和/或自定义模块)
无论要加载的页面如何 - 经历较长加载时间的页面可能是一个非常简单的静态页面(“您已成功完成X”)或复杂的构造,例如所有用户的朋友列表和他们的细节。
我们可以暂时得出以下结论:
PHP / Drupal处理速度没有问题(我们知道所有处理都在快速处理)。
一般服务器调整没有错误(否则所有页面加载都可能会缓慢)。
页面复杂性不是一个重要因素。
互联网连接速度不是一个重要因素。
没有特定的单个或明显的模块组合出错。
有一些因素我们没有考虑,或者对确切原因没有足够的了解。
我们认为这可能是一个缓存问题,但请注意,只有当用户的操作导致数据库写入时才会发生这种情况......这种情况对任何人来说都是熟悉/可解释的吗?
答案 0 :(得分:0)
在您的Web服务器上安装XDebug并监控日志。看看您是否可以将其固定到特定功能以确认您对SQL的怀疑。
尝试在另一台计算机上复制该问题。
这听起来像是你的VPS问题。联系他们,让他们将您带到另一个群集或调查问题。
答案 1 :(得分:0)
启用慢速日志(如果使用mysql)
log_slow_queries=/var/log/mysql/slow-query.log
long_query_time=10
log_queries_not_using_indexes=YES
(重启数据库)
如果它与数据库相关,那么应该给你一些线索。
同时检查它是否使用了太多内存并开始交换(为此使用htop。)