热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

piwik页面卡住问题追查记录

今天无聊就折腾了下piwik,但是发现有概率页面会504,查看nginx日志是php执行超时,而且第一次504之后,后面的所有页面访问全部都是504,重启php-fpm之后又可以正常访问了。leo108.compid-2007.asp于是打开php-fpm的slowlog,在页面504的时候slowl

今天无聊就折腾了下piwik,但是发现有概率页面会504,查看nginx日志是php执行超时,而且第一次504之后,后面的所有页面访问全部都是504,重启php-fpm之后又可以正常访问了。 http://leo108.com/pid-2007.asp 于是打开php-fpm的slowlog,在页面504的时候slowl

今天无聊就折腾了下piwik,但是发现有概率页面会504,查看nginx日志是php执行超时,而且第一次504之后,后面的所有页面访问全部都是504,重启php-fpm之后又可以正常访问了。http://leo108.com/pid-2007.asp

于是打开php-fpm的slowlog,在页面504的时候slowlog里也打出了对应的调用栈:本文来自http://leo108.com

script_filename = /home/www/online/website/piwik/index.php
[0x00007fbec1568f48] session_start() /home/www/online/website/piwik/libs/Zend/Session.php:469
[0x00007fbec1568370] start() /home/www/online/website/piwik/core/Session.php:113
[0x00007fbec1567e68] start() /home/www/online/website/piwik/core/FrontController.php:416
[0x00007fbec1567a08] prepareDispatch() /home/www/online/website/piwik/core/FrontController.php:502
[0x00007fbec15675f8] doDispatch() /home/www/online/website/piwik/core/FrontController.php:84
[0x00007fbec15671d0] dispatch() /home/www/online/website/piwik/core/dispatch.php:34
[0x00007fbec15669a0] +++ dump failed

看来是执行session_start的时候卡住了,php的session是有锁机制的,如果某个页面开启了session,并且该请求尚未结束,则后续该session的请求就会全部锁住,等待之前的请求结束。本文来自http://leo108.com

也就是说piwki页面卡住的原因是之前的某次请求没有结束,但是是哪个请求没有结束呢?因为没有看piwik的代码,而且504是有概率出现的,并不是访问了某个特定的页面后才504,问题追到这里就遇到了瓶颈。

采集者烂JJ

鼓捣了半天之后突然想到,那个没有结束的请求肯定会打在php的slowlog里面,于是重新检查了一下,果真在一堆session的slowlog中发现了不一样的日志:PHP

script_filename = /home/www/online/website/piwik/index.php
[0x00007fbec1568c40] curl_exec() /home/www/online/website/piwik/core/Http.php:483
[0x00007fbec1568798] sendHttpRequestBy() /home/www/online/website/piwik/core/Http.php:94
[0x00007fbec15685e0] sendHttpRequest() /home/www/online/website/piwik/core/Http.php:720
[0x00007fbec1567e00] fetchRemoteFile() /home/www/online/website/piwik/plugins/ExampleRssWidget/RssRenderer.php:46
[0x00007fbec1567be8] get() /home/www/online/website/piwik/plugins/ExampleRssWidget/Controller.php:25
[0x00007fffe0d3cf00] rssPiwik() unknown:0
[0x00007fbec1567788] call_user_func_array() /home/www/online/website/piwik/core/FrontController.php:531
[0x00007fbec1567378] doDispatch() /home/www/online/website/piwik/core/FrontController.php:84
[0x00007fbec1566f50] dispatch() /home/www/online/website/piwik/core/dispatch.php:34
[0x00007fbec1566720] +++ dump failed

看上去是个curl调用http请求,追了下里面的代码,发现是个公共的类,并不是固定请求某个url,这也简单,在curl_exec()之前加个打日志的代码,把curl请求的url记录下来。

PHP

于是又随便点了记下piwik的页面,发现有记录了一个url:http://feeds.feedburner.com/Piwik

PHP

看上去是rss的url,直接在piwik的grep这个url,结果如下:piwik

./plugins/ExampleRssWidget/Controller.php:            $rss = new RssRenderer('http://feeds.feedburner.com/Piwik');
./plugins/ExampleRssWidget/Controller.php:            $rss = new RssRenderer('http://feeds.feedburner.com/PiwikReleases');

是个插件的代码。piwik

进到piwik的后台,直接把ExampleRssWidget这个插件禁用。问题解决!

本文来自http://leo108.com

PS:中国的国情啊……………………

http://leo108.com/pid-2007.asp

推荐阅读
  • 负载均衡_Nginx反向代理动静分离负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分
    nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解 ... [详细]
  • 本文介绍了在无法联网的情况下,通过下载rpm包离线安装zip和unzip的方法。详细介绍了如何搜索并下载合适的rpm包,以及如何使用rpm命令进行安装。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • Redis API
    安装启动最简启动命令行输入验证动态参数启动配置文件启动常用配置通用命令keysbdsize计算key的总数exists判断是否存在delkeyvalue删除指定的keyvalue成 ... [详细]
  • Redis的默认端口、数据库使用和多端口配置
    本文介绍了Redis的默认端口、数据库使用和多端口配置的方法。通过选择不同的数据库和使用flushdb命令可以实现对不同数据库的访问和清除数据。同时,本文还介绍了在同一台机器上启用多个Redis实例的方法,并讨论了配置认证密码的步骤和注意事项。 ... [详细]
  • __call是找不到方法的时候会执行可以代替下面的saddsrem方法publicfunction__call($name,$arguments){if(count($argum ... [详细]
  • Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs
    php教程|php手册xml文件php教程-php手册Linux下部署Symfoy2对appcache和applogs目录的权限设置,symfoy2logs黑色记事本源码,vsco ... [详细]
  • nginx+多个tomcat
    学习nginx的时候遇到的问题:nginx怎么部署两台tomcat?upstream在网上找的资源,我在nginx配置文件(nginx.conf)中添加了两个server。结果只显 ... [详细]
  • (九)Docker常用安装
    一、总体步骤1、搜索镜像2、拉取镜像3、查看镜像4、启动镜像5、停止镜像6、移除镜像二、安装tomcat1、dockerhub上面查找tomcat镜像 dockersearchto ... [详细]
  • Linux一键安装web环境全攻略
    摘自阿里云服务器官网,此处一键安装包下载:点此下载安装须知1、此安装包可在阿里云所有Linux系统上部署安装,此安装包包含的软件及版本为& ... [详细]
  • 有意向可以发简历到邮箱内推.简历直达组内Leader.能做同事的话,内推奖励全给你. ... [详细]
author-avatar
wuyanting67412
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有