熟悉php或者discuz代码的程序员过来分析下这个是什么原因?

2013-11-09 13:53:04 +08:00
 chenwl
具体问题我已经在印象笔记上记录,麻烦各位移步下面网页看内容


http://app.yinxiang.com/shard/s3/sh/4def5c97-f298-4b5d-806d-1be2a4701733/7a4abf858bb281de78cb8c568219e84b

有过这种经历或者熟悉php内部运作帮忙解读下 “消失的时间”是怎么回事?
3712 次点击
所在节点    问与答
8 条回复
chenwl
2013-11-09 14:04:44 +08:00
发现有帐号才能登录,我就发下面的

因为论坛的正常发帖有时会超过2s,最严重的能延迟到21s才能返回结果。正常状态下0.2s可以结束。
为了能够了解发帖 程序的流程消耗的时间,我在source/include/post/post_newthread.php 里插入了timer,
特别是这一段
?1
源代码第281行 左右(我插了时间函数,所以建议你们查找下),

然后我继续深入,即
?1

代码实现在 source/class/model/model_forum_thread.php。
我在这个newthread的函数内部的头部 和尾部 也插入了timer代码。

?1

然后替换服务器的同一文件,生产环境下会把时间统计结果 记录在一个日志文件上。
跑了半天,把日志文件下到本地进行分析,得到结果如下。
?1
[dbinsert] 是第一张图片的代码包裹的测试结果
[block]是第三张图片 对函数实现的代码包裹的测试结果
注意红线,上面一条是正常的,下面是不正常,表明 发帖提交后花了10s才返回结果。而且dbinsert是10000ms,而block才不到100ms。
我想知道 这个时间差 是消耗到哪里去的?
chenwl
2013-11-09 14:09:12 +08:00
http://note.youdao.com/share/?id=be3c2e76c75c151e83426d1000a0765f&type=note

这个才是完美版 ,上面的回复的图的顺序不对
mahone3297
2013-11-09 14:22:57 +08:00
所以,看你的截图,时间是耗在 newthread 里面了。估计是数据库执行慢。看下mysql慢日志
chenwl
2013-11-09 14:30:39 +08:00
@mahone3297 数据库操作在model块里,model的block消耗的时间才不到100ms。但是业务层的关键一行代码 (消耗10000ms),代码展开来就是这个model,函数执行才(100ms)。从model看不出来数据库 慢。倒是业务层那边无故多耗了。所以有此问。
akira
2013-11-09 17:45:38 +08:00
获取tid 和 pid那两句,你就这么肯定是没耗时的?
shiny
2013-11-09 21:41:47 +08:00
对于php 性能问题,首先推荐使用 facebook 出品的 xhprof,完整记录了每个函数的时间开销,还可以绘图表示。
其次,应当开启 mysql 的慢查询,确定不是数据库的原因。
chenwl
2013-11-09 22:00:10 +08:00
@akira 嗯,这个我测过,这两行的话对10000ms没有任何贡献。
raincious
2013-11-09 22:31:19 +08:00
楼主那样调试太慢了,而且找不到具体出状况的调用。

建议安装XDebug开启Profiler功能或者XhProf再看。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/88631

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX