1

我正在使用 Piwik 来跟踪我网站的点击量。它相当受欢迎(平均每天约 4000 次访问/30000 次网页浏览);直到最近它还托管在 Dreamhost 上并且几乎没有工作,因为它太大而无法在不达到内存限制的情况下存档。

我最近使用 nginx 和 php5-fpm 将它移到了我的 VPS,但现在我遇到了另一个问题:跟踪器一直挂在查询上。目前,它使用自己的 php5-fpm 进程池,但它们往往会被阻塞:

  [27-Aug-2013 03:20:05] 警告:[pool stats] child 5908,脚本'/var/www/stats/piwik.php'(请求:“GET /piwik.php”)执行超时(76.106048秒),终止
  [27-Aug-2013 03:20:05] 警告:[pool stats] child 5905,脚本'/var/www/stats/piwik.php'(请求:“GET /piwik.php”)执行超时(82.416656秒),终止
  [2013 年 8 月 27 日 03:20:05] 警告:[pool stats] 孩子 5914 在 75.932611 秒后退出信号 15 (SIGTERM)
  [2013 年 8 月 27 日 03:20:05] 通知:[池统计] 孩子 6219 开始
  等等等等等等

慢日志指向 core/Tracker/Visit.php:1203 中的大型 SELECT 查询

[2013 年 8 月 27 日 03:17:52] [池统计] pid 5789
脚本文件名 = /var/www/stats/piwik.php
[0x091b21b4] xecute() /var/www/stats/core/Tracker/Db/Pdo/Mysql.php:159
[0x091b2024] 查询()/var/www/stats/core/Tracker/Db/Pdo/Mysql.php:126
[0x091b0bfc] fetch() /var/www/stats/core/Tracker/Visit.php:1203

这些表格已经过优化,据我所知是最新的。我找不到插入查询一直挂起的任何原因;我已经使用 mysqltuner 尝试将缓存 / 等调整为合理的值,但无论出于何种原因,进程都会继续锁定并阻塞系统。

问题也不总是很明显。在一切突然走下坡路之前,它可能会持续一段时间。我无法在它开始崩溃的时间与任何特定的请求或日志之间找到任何明显的相关性。

4

0 回答 0