我正在使用Piwik跟踪我网站的点击量。它相当受欢迎(平均每天约4k次访问/ 30k综合浏览量);直到最近它才被托管在Dreamhost上并且几乎没有用,因为它太大了,无法存档而没有达到内存限制。
我最近使用nginx和php5-fpm将其移至我的VPS,但现在我还有另一个问题:跟踪器一直挂在查询中。目前,它正在使用自己的php5-fpm进程池,但它们往往会被堵塞:
[27-Aug-2013 03:20:05] WARNING: [pool stats] child 5908, script '/var/www/stats/piwik.php' (request: "GET /piwik.php") execution timed out (76.106048 sec), terminating [27-Aug-2013 03:20:05] WARNING: [pool stats] child 5905, script '/var/www/stats/piwik.php' (request: "GET /piwik.php") execution timed out (82.416656 sec), terminating [27-Aug-2013 03:20:05] WARNING: [pool stats] child 5914 exited on signal 15 (SIGTERM) after 75.932611 seconds from start [27-Aug-2013 03:20:05] NOTICE: [pool stats] child 6219 started etc etc etc ...
慢速日志指向core / Tracker / Visit.php中的大型SELECT查询:1203
[27-Aug-2013 03:17:52] [pool stats] pid 5789 script_filename = /var/www/stats/piwik.php [0x091b21b4] xecute() /var/www/stats/core/Tracker/Db/Pdo/Mysql.php:159 [0x091b2024] query() /var/www/stats/core/Tracker/Db/Pdo/Mysql.php:126 [0x091b0bfc] fetch() /var/www/stats/core/Tracker/Visit.php:1203
表格已经过优化,据我所知是最新的。我找不到插入查询保持挂起的任何原因;我已经使用mysqltuner尝试将缓存/ etc调整为合理的值,但无论出于何种原因,进程都会继续锁定并阻塞系统。
问题并不总是显而易见的;在一切都突然下坡之前,它可能会持续一段时间。我无法在它开始崩溃和任何特定请求或日志之间找到任何明显的相关性。