V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
chenwl
V2EX  ›  问与答

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

  •  
  •   chenwl · 2013-11-09 13:53:04 +08:00 · 3684 次点击
    这是一个创建于 4036 天前的主题,其中的信息可能已经有所发展或是发生改变。
    具体问题我已经在印象笔记上记录,麻烦各位移步下面网页看内容


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

    有过这种经历或者熟悉php内部运作帮忙解读下 “消失的时间”是怎么回事?
    8 条回复    1970-01-01 08:00:00 +08:00
    chenwl
        1
    chenwl  
    OP
       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
        2
    chenwl  
    OP
       2013-11-09 14:09:12 +08:00
    http://note.youdao.com/share/?id=be3c2e76c75c151e83426d1000a0765f&type=note

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

    建议安装XDebug开启Profiler功能或者XhProf再看。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3485 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 04:54 · PVG 12:54 · LAX 20:54 · JFK 23:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.