当前位置:首页>Linux>分析Linux CPU瓶颈总在碰运气?让perf三板斧终结你的“盲猜玄学”

分析Linux CPU瓶颈总在碰运气?让perf三板斧终结你的“盲猜玄学”

  • 2026-08-19 07:22:43
分析Linux CPU瓶颈总在碰运气?让perf三板斧终结你的“盲猜玄学”
perf 是 Linux 内核 perf_events 子系统提供的性能分析工具。它的核心能力是对 CPU 进行低开销的采样和计数,从而回答两个基础问题:时间花在哪了、以及为什么花在这。

perf 的工作方式是内核态的,不依赖特定语言运行时。Java、Python、Go、C++ 的进程都可以分析,不需要修改代码或插入探针。这使得 perf 成为排查 CPU 相关性能问题的首选工具。

perf 包含数十个子命令,但日常排查中高频使用的只有四个:stat(计数,定方向)、top(实时采样,找热点)、record(记录采样,存证据)、report(分析采样,看调用链)。本文围绕这四个命令展开。


一、perf 能做什么、不能做什么

1.1 能力地图

perf 的底层是 CPU 硬件性能监控单元(PMU),以及内核提供的软件事件。基于这些事件源,perf 提供四类能力:

能力
说明
对应命令
典型用途
计数
在指定时间段内统计事件发生的次数
perf stat
判断性能瓶颈类型(CPU 效率、缓存 miss、分支预测失败等)
采样
按固定频率记录事件发生时的程序状态
perf top
 / record
找到消耗 CPU 的具体函数
追踪
记录事件的完整上下文(调用栈、时间戳)
perf record -g
生成火焰图,分析调用链
探测
在指定函数入口/出口动态插入记录点
perf probe
不修改代码的情况下追踪特定函数

计数和采样的区别需要理解清楚:计数回答"发生了多少次",采样回答"发生时的上下文是什么"。计数开销极低(通常 < 1%),适合快速判断方向;采样会产生较多数据,用于深度分析。

采样原理(理解火焰图的前提):perf 以固定频率(如 4000 Hz)触发硬件中断,每次中断记录"此刻正在执行哪个函数 + 调用栈"。样本数越多,统计越接近真实分布。采样频率由 -F 参数控制,生产环境建议显式指定(通常 99 Hz,见 3.4 的参数表)。

1.2 适用场景

perf 为以下场景而生:

场景
为什么适合
用 perf 的哪个能力
CPU 使用率高的进程
直接采样 CPU 周期
perf top
 / record
升级后性能下降
对比新旧版本的火焰图
perf record
 + 差分火焰图
算法优化效果验证
对比优化前后的 IPC 和缓存 miss 率
perf stat
定位未知的热点函数
实时采样看占比
perf top
Java/C++ 混合应用的 CPU 分析
不依赖语言运行时,内核态统一采样
perf record

1.3 不适用场景

perf 的设计目标是 CPU 性能分析,以下场景不是它的强项:

场景
为什么不适合
替代工具
I/O 延迟分析
perf 不追踪块设备 I/O 事件细节
biosnoop-bpfcc
iostat
网络包级分析
需要看每个包的延迟和重传
tcpdump
tcplife-bpfcc
内存泄漏定位
perf 不追踪内存分配/释放配对
memleak-bpfcc
valgrind
应用层业务逻辑错误
这是功能 bug,不是性能问题
日志、debugger
频繁上下文切换的根因
需要看调度事件的时间线
trace-cmd
(Ftrace)
锁竞争分析
perf lock
 功能有限,复杂场景不够用
lockstat
(内核编译选项)

理解这些边界很重要。一个常见错误是:遇到数据库查询慢,直接跑 perf record,看了半天火焰图发现时间都在等 I/O——这时候应该先用 iostat 或 biosnoop 确认 I/O 瓶颈,而不是在 CPU 采样里找答案。


二、使用方法论:三步排查法

perf 的命令很多,但排查 CPU 性能问题的思路是固定的。按照下面的顺序使用,可以避免两个最常见的错误:(1)跳过计数直接采样,导致方向错误;(2)采样时间过长,产生海量数据却抓不到关键信息。

2.1 方法论总览

┌─────────────────────────────────────────────────────────────────┐
│  Step 1: perf stat 定方向                                       │
│  ───────────────────────                                        │
│  看 IPC、缓存 miss、分支预测失败 → 判断瓶颈类型                  │
│  IPC < 0.5 → 内存瓶颈(优化数据局部性)                          │
│  IPC > 1.0 → CPU 在高效计算(优化算法或扩容)                     │
└─────────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────────┐
│  Step 2: perf top 找热点                                        │
│  ───────────────────────                                        │
│  实时看哪个函数占 CPU 最高                                       │
│  异常高的陌生函数 → 重点调查                                     │
│  Java 注意 [unknown] 符号问题                                    │
└─────────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────────┐
│  Step 3: perf record + 火焰图 定位根因                           │
│  ────────────────────────────────                                │
│  记录调用栈 → 火焰图可视化 → 看调用链                             │
│  平顶 = 问题在这个函数内部                                        │
│  山峰 = 问题在调用链深处                                          │
└─────────────────────────────────────────────────────────────────┘

这三步的核心逻辑是从宏观到微观、从方向到细节。第一步确定"是不是 CPU 的问题、是什么类型的 CPU 问题",第二步确定"哪个函数在吃 CPU",第三步确定"这个函数是怎么被调到的、调用链上哪里出了错"。

多数问题走到第三步就结束了。如果还需要知道热点函数里具体是哪一条指令在拖累,可以在第三步之后加第四步:perf annotate 指令级下钻(见 3.5)。

2.2 为什么第一步必须是 perf stat

很多新手看到 CPU 高就直接跑 perf record -g,采集 30 秒数据生成火焰图。这个做法的问题在于:如果 CPU 高的原因是缓存 miss 严重(IPC 只有 0.3),那么火焰图上的热点函数只是"受害者"——它因为等内存而占用了大量 CPU 时间,但真正的根因是数据结构的设计导致缓存不友好。这时候看火焰图会误判为"这个函数计算量太大",进而去优化算法复杂度,而实际上应该改数据布局。

perf stat 的作用就是在投入深度分析之前,先确认瓶颈类型。它的开销极低(通常 < 1%),几秒钟就能给出判断依据。


三、核心命令详解

3.1 perf stat:计数,定方向

perf stat 在指定时间段内统计硬件事件和软件事件的发生次数。默认输出包括 CPU 周期数、指令数、上下文切换次数等。

基础用法:

# 系统级统计(5秒)
perf stat -a sleep 5

# 针对单个进程统计(10秒)
perf stat -p <pid> sleep 10

# 统计特定事件:IPC 和缓存 miss
perf stat -e cycles,instructions,cache-misses -p <pid> sleep 10

输出解读:

典型的 perf stat 输出如下:

 Performance counter stats for process id '12345':

         10,234,567      cycles                    # 2.456 GHz
         15,678,901      instructions              # 1.53  insn per cycle
            234,567      cache-misses              # 2.292 % of all cache refs
            123,456      context-switches

      10.002345678 seconds time elapsed

需要关注三个核心指标:

IPC(Instructions Per Cycle):每 CPU 周期执行的指令数。它直接反映 CPU 的利用效率。

IPC 范围
含义
优化方向
> 1.0
CPU 在高效运转,指令流水线充分利用
算法优化、扩容
0.5 - 1.0
一般效率,有一定优化空间
检查缓存 miss、分支预测
< 0.5
CPU 大量时间在等待(通常是内存)
优化数据局部性、减少随机访问

现代 CPU 有多条流水线,IPC 可以大于 1(理想情况下 Intel 可达 3-4,ARM 可达 4-6)。IPC 低于 0.5 是一个明确的信号:CPU 不是算不过来,而是等数据等太久。

一个常见的误读:IPC 低,不代表 CPU 闲——它代表 CPU 在"空转等待",可能是等待内存、锁或 IO。这时优化算法没有用,该查的是数据局部性和锁竞争。

cache-misses:缓存未命中次数。需要结合 cache-references 计算 miss 率。如果 miss 率超过 10%,说明数据访问模式对缓存不友好。常见的优化手段包括:结构体字段重排(把热字段放一起)、循环遍历方向与内存布局一致(行优先 vs 列优先)、减少指针追逐(链表 → 数组)。

context-switches:上下文切换次数。如果每秒超过 10,000 次,说明线程调度过于频繁。可能的原因包括:线程数远超 CPU 核数、锁竞争激烈导致线程频繁阻塞/唤醒、定时器精度设置过高。

一个典型的工作流程:

# 1. 先看总体 IPC 和缓存 miss
perf stat -e cycles,instructions,cache-misses,cache-references -p <pid> sleep 5

# 2. 如果 IPC 低,进一步看是哪级缓存 miss
perf stat -e L1-dcache-load-misses,L1-dcache-loads,LLC-load-misses,LLC-loads -p <pid> sleep 5

# 3. 如果怀疑分支预测问题
perf stat -e branches,branch-misses -p <pid> sleep 5

边界说明:perf stat 给出的是聚合统计,它告诉你"整体上有多少缓存 miss",但不告诉你"哪个函数导致了这些 miss"。要定位到具体函数,需要用 perf record 采样。

3.2 perf top:实时采样,找热点

perf top 以类似 top 的界面实时显示 CPU 占用最高的函数。它是交互式的,适合在问题发生时快速看一眼"谁最忙"。

基础用法:

# 实时查看全局热点
perf top

# 只看某个进程
perf top -p <pid>

# 显示调用关系(需要帧指针或 LBR 支持)
perf top -p <pid> -g

# 只看用户态(过滤内核函数)
perf top -p <pid> --sort comm,dso,symbol

界面解读:

  25.34%  libjvm.so         [.] Interpreter
  18.56%  [kernel]          [k] _raw_spin_unlock_irqrestore
  12.34%  libcrypto.so      [.] aesni_ctr32_encrypt
   8.90%  [unknown]         [.] 0x00007f8b2c3a1234
   5.23%  libmysqlclient.so [.] mysql_parse

第一列是 CPU 占比,第二列是共享库/模块名,第三列是函数名。

需要注意三种典型情况:

  1. 热点是业务函数
    (如 processOrdercalculatePrice):占比高是预期行为,除非这个函数比历史基线明显增高。
  2. 热点是基础库函数
    (如 memcpystrcmpjson_decode):如果这类函数的占比异常高,通常意味着上层业务在大量调用它们。比如 json_decode 占 15%,可能不是 JSON 库的问题,而是业务在循环里反复解析同一个 JSON。
  3. 热点是 [unknown]
    :表示 perf 无法解析符号。这在 Java 应用中特别常见,因为 JVM 默认不保留符号表。下面的章节会详细说明解决方法。

perf top 的局限: 它只显示"哪个函数在消耗 CPU",不显示"这个函数是怎么被调到的"。要分析调用链,需要 perf record -g

3.3 Java 符号问题:为什么看到 [unknown]

Java 应用用 perf 分析时,默认会看到很多 [unknown] 和 Interpreter。这是因为:

  1. JVM 在运行时会进行 JIT 编译,把字节码编译成机器码。这些机器码存储在内存中,perf 能看到这些地址,但不知道对应的 Java 方法名。
  2. JVM 默认不保存帧指针(Frame Pointer),导致 perf 无法正确展开调用栈。
  3. Java 标准库的方法通常已经有符号(因为是通过 -ljava 加载的),但用户代码和 JIT 编译后的代码没有。

解决方法:

# 方法1:开启帧指针(JDK 8u60+)
java -XX:+PreserveFramePointer -jar app.jar

# 方法2:生成符号映射文件(适用于无法重启的进程)
# 下载 perf-map-agent: https://github.com/jvm-profiling-tools/perf-map-agent
cd /tmp/perf-map-agent/out
java -cp attach-main.jar:$JAVA_HOME/lib/tools.jar net.virtualvoid.perf.AttOnce <pid>
# 生成 /tmp/perf-<pid>.map,perf 会自动读取

# 方法3:使用 --call-graph=lbr(需要 Intel CPU 支持 Last Branch Record)
perf record -g --call-graph=lbr -p <pid> -- sleep 10

方法1是最好的方案(重启时加上参数即可),方法2适用于无法重启的生产环境。方法3依赖 CPU 特性,不是所有机器都支持。

3.4 perf record + 火焰图:记录调用链,定位根因

perf record 按固定频率采样,记录每次采样时程序的调用栈。配合 Brendan Gregg 的 FlameGraph 工具,可以生成直观的火焰图。

采样和生成火焰图:

# 1. 记录采样(-F 99 表示每秒采样99次,-g 记录调用栈)
perf record -F 99 -g -p <pid> -- sleep 30

# 2. 生成报告(文本形式)
perf report --stdio

# 3. 生成火焰图(需要 FlameGraph 工具)
git clone https://github.com/brendangregg/FlameGraph.git /opt/FlameGraph
perf script > out.perf
/opt/FlameGraph/stackcollapse-perf.pl out.perf > out.folded
/opt/FlameGraph/flamegraph.pl out.folded > flamegraph.svg

火焰图的阅读方法:

火焰图是 SVG 格式的交互式图表。y 轴是调用栈深度(从上到下是从主函数到被调函数),x 轴是采样占比(宽度代表该函数在总采样中的比例)。

判断性能问题类型,看两个特征:

火焰图特征
含义
根因判断
平顶
(宽但不高)
一个函数自身代码占大量 CPU
问题在这个函数内部,直接优化它
山峰
(又宽又高)
一个调用链上的多个函数共同占 CPU
问题在调用链深处,看最宽的那层
多个山峰
多个不同的调用路径都在消耗 CPU
可能是全局性问题(如锁竞争、配置错误)
锯齿状
调用栈频繁变化
可能是递归过深或异常处理路径

读图的一个关键判断:优化优先级看顶层最宽的块,而不是调用链最深的部分。很多团队花大力气优化的函数,其实只占 3%——第一眼就该看最宽的那块。另外注意累计占比:同一父路径下多个子块的宽度之和,才是这条路径的真实成本,只盯单个符号会低估一条调用链。

差分火焰图:对比优化效果

火焰图最有价值的用法之一是对比。优化前采一张,优化后采一张,生成差分火焰图:

# 优化前
perf record -F 99 -g -p <pid> -- sleep 30
perf script | /opt/FlameGraph/stackcollapse-perf.pl > baseline.folded

# 优化后
perf record -F 99 -g -p <pid> -- sleep 30
perf script | /opt/FlameGraph/stackcollapse-perf.pl > optimized.folded

# 差分火焰图(红色=优化后增加,蓝色=优化后减少)
/opt/FlameGraph/difffolded.pl optimized.folded baseline.folded | \
    /opt/FlameGraph/flamegraph.pl > diff.svg

差分火焰图的好处是直观:一眼就能看出优化是否命中了目标函数,以及是否有副作用(其他地方反而变多了)。

采样参数的选择:

参数
建议值
说明
采样频率 -F
99 Hz
避免与 100Hz/1000Hz 等常见周期对齐,减少采样偏差
采样时间
5-10 秒
大多数场景足够。30 秒以上数据量巨大,处理慢
调用栈深度 --call-graph
fp
 或 lbr
fp
 需要帧指针,lbr 需要 Intel CPU

3.5 perf annotate:指令级下钻

perf record 完成后,根因通常已经定位到函数。但有时候还需要回答最后一个问题:函数里具体是哪一条指令在拖累?perf annotate 负责这"最后一公里"。

# 查看热点函数的指令级热力分布(交互式)
perf annotate -i perf.data

# 只看某个函数,文本输出便于 grep
perf annotate -i perf.data --stdio | grep -A 20 <function_name>

它会列出热点函数内每条指令的采样占比,把优化点从"函数级"精确到"指令级"。比如看到热点集中在某个循环体内的比较指令上,就知道该优化的是循环里的分支逻辑,而不是整个函数。

使用时机:函数级已经锁定、但不知道"函数里哪一行在拖累"时使用。日常大多数问题到函数级就够了,这一步按需选用——它和 perf probe 一样,是排障链路的"进阶档位"。

3.6 perf probe:动态探针

perf probe 允许在运行中的程序上动态插入探测点,不需要修改代码或重启进程。

典型用法:

# 在 libc 的 malloc 函数入口加探针
perf probe -x /usr/lib/x86_64-linux-gnu/libc.so.6 --add 'malloc'

# 查看已定义的探针
perf probe -l

# 记录探针触发时的调用栈
perf record -e probe:malloc -p <pid> -- sleep 10

这个功能在以下场景中有用:

  • 怀疑某个第三方库函数被频繁调用,但不想为了验证这个假设而发版加日志
  • 需要确认某个函数在实际运行中的参数值(配合 --vars 选项)
  • 追踪 USDT(User Statically Defined Tracing)探针,如 Java 内置的 sdt_java:method__entry

需要注意的是,perf probe 的开销比采样高,不建议在生产环境长时间开启。


四、完整排查示例

以下是一个基于真实工具输出的排查流程,展示如何从症状到根因:

症状:某 Java 服务的 CPU 使用率从 30% 升到 80%。

Step 1:perf stat 定方向

perf stat -e cycles,instructions,cache-misses,cache-references -p 12345 sleep 5

输出:

    2,456,789,012      cycles
    1,234,567,890      instructions              # 0.50  insn per cycle
      123,456,789      cache-misses              # 18.5% of all cache refs

IPC 为 0.50,缓存 miss 率 18.5%。判断:CPU 效率偏低,存在内存访问瓶颈。

Step 2:perf top 找热点

perf top -p 12345 -g

输出显示 processOrder 占 35%,jsonDecode 占 22%,hashMapGet 占 15%。jsonDecode 的占比异常高——历史基线中这个函数通常只占 5% 左右。

Step 3:perf record + 火焰图 定位根因

perf record -F 99 -g -p 12345 -- sleep 10
perf script | stackcollapse-perf.pl | flamegraph.pl > flame.svg

火焰图显示:processOrder → validatePayload → jsonDecode 是一个宽山峰。进一步看 jsonDecode 内部,大部分时间花在 String.parse 上。如果还想确认到底是哪条指令在拖累,可以按 3.5 的方法跑 perf annotate 下钻到指令级。

根因validatePayload 在处理每个订单时都会解析一次 JSON payload,而这个 payload 在订单生命周期内是不变的。应该是升级后某个改动把缓存逻辑去掉了。

修复:在 validatePayload 中加入缓存,避免重复解析相同 payload。

验证(量化前后对比)

修复后重跑同一条 perf stat 命令:

    2,456,000,000      cycles
    2,650,123,456      instructions              # 1.08  insn per cycle
       12,345,678      cache-misses              # 3.2% of all cache refs

IPC 从 0.50 升到 1.08,缓存 miss 率从 18.5% 降到 3.2%,CPU 使用率从 80% 回落到 35% 左右。如果还想直观对比优化前后的调用路径变化,可以按 3.4 的方法生成差分火焰图做二次确认。


五、常见问题速查

问题
现象
原因
解决
Java 函数显示 [unknown]
perf top/report 看不到 Java 方法名
JVM 默认去掉符号表和帧指针
加 -XX:+PreserveFramePointer,或用 perf-map-agent
调用栈只有一层
火焰图高度只有 1-2 层
编译器优化去掉了帧指针
--call-graph=lbr
(需 Intel CPU)或重编译加 -fno-omit-frame-pointer
采样文件巨大
perf.data
 几百 MB
采样时间太长或频率太高
缩短到 5-10 秒,频率保持 99Hz
perf record
 提示权限不足
无法记录
普通用户没有 CAP_PERFMON
用 root,或 sudo setcap cap_perfmonep /usr/bin/perf
内核函数占比异常高
sys_call
copy_user 等占 30%+
可能是系统调用过于频繁
用 perf stat -e syscalls:sys_enter_* 统计具体 syscall
火焰图有多个不相关的宽峰
没有明显的主热点
可能是多线程竞争或全局锁
用 perf lock 分析锁等待
已定位热点函数,仍想知道具体指令
函数级优化效果不明显
热点在函数内部的特定指令
用 perf annotate -i perf.data 下钻到指令级

六、命令速查

# ===== 快速诊断 =====
perf stat -a sleep 5                    # 系统级计数(5秒)
perf stat -p <pid> sleep 10             # 进程级计数(10秒)
perf stat -e cycles,instructions -p <pid> sleep 5   # 只看 IPC

# ===== 实时热点 =====
perf top                                # 全局热点
perf top -p <pid>                       # 单进程热点
perf top -p <pid> -g                    # 带调用栈

# ===== 采样分析 =====
perf record -F 99 -g -p <pid> -- sleep 10           # 记录采样
perf report --stdio                     # 文本报告
perf script > out.perf                  # 导出原始数据

# ===== 指令级下钻 =====
perf annotate -i perf.data              # 下钻到指令行
perf annotate -i perf.data --stdio | grep -A 20 <func>   # 只看某函数

# ===== 火焰图 =====
perf script | stackcollapse-perf.pl | flamegraph.pl > flame.svg

# ===== 差分火焰图 =====
difffolded.pl optimized.folded baseline.folded | flamegraph.pl > diff.svg

# ===== 动态探针 =====
perf probe -x <lib> --add '<function>'  # 加探针
perf record -e probe:<name> -p <pid>    # 记录探针触发

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-21 13:38:28 HTTP/2.0 GET : https://f.mffb.com.cn/a/510605.html
  2. 运行时间 : 0.367931s [ 吞吐率:2.72req/s ] 内存消耗:4,570.66kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=3a2eb328071f5f6e5192c3e000630657
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000804s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001363s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.007366s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000715s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001509s ]
  6. SELECT * FROM `set` [ RunTime:0.000593s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001465s ]
  8. SELECT * FROM `article` WHERE `id` = 510605 LIMIT 1 [ RunTime:0.002848s ]
  9. UPDATE `article` SET `lasttime` = 1787290708 WHERE `id` = 510605 [ RunTime:0.057416s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000655s ]
  11. SELECT * FROM `article` WHERE `id` < 510605 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001105s ]
  12. SELECT * FROM `article` WHERE `id` > 510605 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.003324s ]
  13. SELECT * FROM `article` WHERE `id` < 510605 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.031060s ]
  14. SELECT * FROM `article` WHERE `id` < 510605 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.061301s ]
  15. SELECT * FROM `article` WHERE `id` < 510605 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.033268s ]
0.371749s