当前位置:首页>Linux>从零写OS内核 | ftrace--Linux 原生的「代码级录像机」

从零写OS内核 | ftrace--Linux 原生的「代码级录像机」

  • 2026-06-29 02:01:19
从零写OS内核 | ftrace--Linux 原生的「代码级录像机」

场景:系统负载突然飙高,CPU 100%,你怀疑是某个系统调用卡住了,但不知道具体卡在哪一层。top 只告诉你哪个进程,strace 只能看到系统调用入口,看不到内核里面的执行路径。有没有办法把一次系统调用在内核里的完整调用栈录下来,像录像一样回放?

有。这个东西叫 ftrace


ftrace 是什么

ftrace 是 Linux 内核自带的一套函数级追踪框架,从 2.6 内核时代(2008 年)就内置在 Linux 里了。它用内核里的 tracepoints 和动态 kprobe,把函数调用关系实时记录下来,供用户态工具读取。

和 eBPF 不同,ftrace 是内核原生自带的,不需要装任何包,不需要编译任何程序,直接用。

┌─────────────────────────────────────────┐
│  用户态                                  │
│  /sys/kernel/debug/tracing/             │  ← 所有操作通过文件系统完成
│    ├── current_tracer                   │    切换追踪器
│    ├── tracing_on                       │    开启/暂停
│    ├── set_ftrace_filter                │    过滤函数名
│    ├── set_ftrace_pid                   │    只追踪特定进程
│    ├── trace                            │    查看输出
│    └── tracing_pipe                     │    实时流式读取
└─────────────────────────────────────────┘
           │
           ▼
┌─────────────────────────────────────────┐
│  内核空间                                │
│  ┌─────────────────────────────────┐    │
│  │  function_graph tracer          │    │  ← 记录函数调用+返回+耗时
│  │  function tracer                 │    │  ← 记录函数调用
│  │  hwlat tracer                    │    │  ← 硬件延迟检测
│  │  nop tracer                      │    │  ← 无追踪(默认)
│  └─────────────────────────────────┘    │
└─────────────────────────────────────────┘

ftrace 的核心思想:函数是图的节点,函数调用关系是边。 把图里每个节点的进出时间记下来,就是一次完整的执行轨迹。


第一个实验:function_graph 追踪 read() 调用栈

function_graph 是 ftrace 里最强大的追踪器——它不只记录「哪个函数被调用了」,还记录进入和退出的配对时间,能还原出完整的调用栈。

操作步骤

# 1. 切换到 root(所有 ftrace 操作都需要 root 权限)
sudo -i

# 2. 确认当前 tracer
cat /sys/kernel/debug/tracing/current_tracer
# 输出:nop   ← nop = no operation,表示当前没有追踪任何东西

# 3. 查看可用的 tracer
cat /sys/kernel/debug/tracing/available_tracers
# output: function_graph function nop ... hwlat

# 4. 开启 function_graph tracer
echo function_graph > /sys/kernel/debug/tracing/current_tracer

# 5. 只追踪 read 系统调用(用通配符过滤,减少噪音)
echo "*read*" > /sys/kernel/debug/tracing/set_ftrace_filter

# 6. 开启追踪(1 = 开始,0 = 暂停)
echo 1 > /sys/kernel/debug/tracing/tracing_on

# 7. 在另一个终端运行一个读操作
cat /etc/hostname   # 或任何读文件的操作

# 8. 关闭追踪
echo 0 > /sys/kernel/debug/tracing/tracing_on

# 9. 查看结果
cat /sys/kernel/debug/tracing/trace

模拟输出(cat /etc/hostname 的调用栈):

# tracer: function_graph
#
# entries-in-buffer/entries-written: 28473/28473   #P=4
#
#                              _-----=> irqs-off
#                             / _----=> need-resched
#                            | / _---=> hardirq/softirq
#                            || / _--=> preempt-depth
#                            ||| /
#                            ||||    delay
#         COMMAND          PID   ||||  TIMESTAMP  FUNCTION
#            |               |   ||||     |         |
#               cat         9999   |   0.123456 |  __x64_sys_read() {
#               cat         9999   |   0.123458 |    ksys_read() {
#               cat         9999   |   0.123460 |      vfs_read() {
#               cat         9999   |   0.123462 |        new_sync_read() {
#               cat         9999   |   0.123464 |          ext4_file_read_iter() {
#               cat         9999   |   0.123466 |            ext4_sequential_read() {
#               cat         9999   |   0.123470 |              page_cache_sync_readahead() {
#               cat         9999   |   0.123472 |                ... }
#               cat         9999   |   0.123480 |            } /* ext4_sequential_read */   0.008
#               cat         9999   |   0.123482 |          } /* ext4_file_read_iter */   0.016
#               cat         9999   |   0.123484 |        } /* new_sync_read */   0.020
#               cat         9999   |   0.123486 |      } /* vfs_read */   0.024
#               cat         9999   |   0.123488 |    } /* ksys_read */
#               cat         9999   |   0.123490 |  } /* __x64_sys_read */

解读:

  • 每行代表一个函数的入口,花括号 { 代表进入,} 代表退出
  • 0.008 是这个函数的耗时(单位毫秒)
  • 缩进代表调用层级——越深代表越靠近底层
  • || 列是状态标志:irqs-off、need-resched、hardirq/softirq、preempt-depth

这个图把 read() 从系统调用入口到文件系统读取的全路径都展示出来了:Syscall → VFS → ext4 → page_cache。这就是内核里的代码级录像。


function tracer:比 function_graph 更轻量

如果你只关心「哪个函数被调用了」,不需要耗时信息,用 function tracer:

# 只追踪 vfs_read 和相关函数
echo "vfs_read" > /sys/kernel/debug/tracing/set_ftrace_filter
echo "ext4_file_read_iter" >> /sys/kernel/debug/tracing/set_ftrace_filter

# 也可以用通配符
echo "ext4_*" > /sys/kernel/debug/tracing/set_ftrace_filter

# 切换到 function tracer
echo function > /sys/kernel/debug/tracing/current_tracer
echo 1 > /sys/kernel/debug/tracing/tracing_on

# 做点什么
ls /tmp

# 关闭并查看
echo 0 > /sys/kernel/debug/tracing/tracing_on
cat /sys/kernel/debug/tracing/trace

输出比 function_graph 简洁很多(只有函数名,没有耗时):

# tracer: function
#
#  TASK-PID   CPU#    TIMESTAMP  FUNCTION
#     | |      |          |         |
    ls-12345 [000]    1234.567890: vfs_read <-ksys_read
    ls-12345 [000]    1234.567892: ext4_file_read_iter <-vfs_read
    ls-12345 [000]    1234.567894: page_cache_sync_readahead <-ext4_sequential_read
    ...

function tracer 比 function_graph 轻量很多(只记录入口,不记录返回),适合追踪函数调用关系或采样分析。


过滤规则:怎么只追踪特定进程

# 只追踪 PID 1234 的内核调用
echo 1234 > /sys/kernel/debug/tracing/set_ftrace_pid
echo function_graph > /sys/kernel/debug/tracing/current_tracer

# 只追踪某个进程的系统调用(结合 tracepoint)
echo 1234 > /sys/kernel/debug/tracing/set_ftrace_pid
echo 1 > /sys/kernel/debug/tracing/tracing_on
# 然后运行进程...
# 排除特定函数(不想看到的函数)
echo "*lock*" > /sys/kernel/debug/tracing/set_ftrace_notrace
echo "*rcu*" >> /sys/kernel/debug/tracing/set_ftrace_notrace
# 全局追踪所有进程,但只看某个子系统的函数
echo "ext4_*" > /sys/kernel/debug/tracing/set_ftrace_filter
echo "jbd2_*" >> /sys/kernel/debug/tracing/set_ftrace_filter

动态 kprobe:在任意函数插入断点

ftrace 不只追踪已有的 tracepoint,还支持动态插入探针到任意函数——这就是 kprobe

# 在 schedule() 函数入口插入探针(schedule 是内核调度器,每次进程切换都会调用)
echo 'p:schedule schedule' > /sys/kernel/debug/tracing/kprobe_events

# 启用
echo 1 > /sys/kernel/debug/tracing/events/kprobes/schedule/enable

# 开启追踪
echo 1 > /sys/kernel/debug/tracing/tracing_on

# 运行一小段时间
sleep 5

# 查看结果
cat /sys/kernel/debug/tracing/trace

kprobe 可以在任意函数入口插入,kretprobe 在函数返回时插入:

# kretprobe:追踪 schedule() 的返回(每次进程切换耗时多长)
echo 'r:schedule_return schedule' > /sys/kernel/debug/tracing/kprobe_events
echo 1 > /sys/kernel/debug/tracing/events/kprobes/schedule_return/enable
echo 1 > /sys/kernel/debug/tracing/tracing_on

读取函数参数值(kprobe 可以读取参数):

# 追踪 schedule(),打印当前进程名
# %s 是格式说明符,comm 是 schedule() 的隐含参数
echo 'p:schedule schedule comm=+0(%di):string' > /sys/kernel/debug/tracing/kprobe_events

常用场景:定位系统延迟

场景 1:找出系统调用卡在哪一层

# 追踪 write 系统调用,找出哪一步最慢
echo "*write*" > /sys/kernel/debug/tracing/set_ftrace_filter
echo function_graph > /sys/kernel/debug/tracing/current_tracer
echo 1 > /sys/kernel/debug/tracing/tracing_on

# 运行写入
echo "test" > /tmp/test.txt

echo 0 > /sys/kernel/debug/tracing/tracing_on
cat /sys/kernel/debug/tracing/trace | grep -A 50 "vfs_write"

场景 2:测量上下文切换耗时

# 追踪 schedule() 函数,看看进程切换花了多长时间
echo 'r:schedule_ret schedule' > /sys/kernel/debug/tracing/kprobe_events
echo 1 > /sys/kernel/debug/tracing/events/kprobes/schedule_ret/enable
echo function > /sys/kernel/debug/tracing/current_tracer
echo 1 > /sys/kernel/debug/tracing/tracing_on

场景 3:硬件中断延迟检测(hwlat tracer)

# 检测硬件延迟(CPU 中断响应时间)
echo hwlat > /sys/kernel/debug/tracing/current_tracer
cat /sys/kernel/debug/tracing/tracing_on   # 确认已开启

# 查看结果
cat /sys/kernel/debug/tracing/trace

trace-cmd:命令行封装,比直接操作文件更方便

直接读写 /sys/kernel/debug/tracing/ 很不直观。trace-cmd 提供了更友好的 CLI:

# 安装
sudo apt install trace-cmd

# 录制 function_graph(录制期间执行命令,结束后再分析)
sudo trace-cmd record -p function_graph -g do_sys_openat2 -o trace.dat -- ls /tmp
# 选项解释:
#   -p function_graph   指定使用 function_graph 追踪器
#   -g do_sys_openat2   只追踪这个函数(其他不记录)
#   -o trace.dat        输出到文件(record 自动创建)

# 查看录制结果
sudo trace-cmd report trace.dat
# 实时查看追踪(类似 top)
sudo trace-cmd top

# 录制并后台运行
sudo trace-cmd record -p function_graph -F 'cat /etc/hostname' &

ftrace 和 eBPF 的关系

ftrace eBPF
内置 Linux 原生自带(2.6+) Linux 4.x+(需要内核支持)
编程能力 无(只配置) 有(写 BPF 程序)
性能 静态插桩,较轻量 动态插桩,可编程过滤
适用场景 固定模式、已知函数 复杂逻辑、动态条件
数据处理 只能输出到 trace buffer 可在程序内聚合计算

ftrace 是侦察兵,eBPF 是特种兵。 ftrace 够用时用 ftrace,ftrace 不够时用 eBPF。


踩坑与注意事项

坑 1:Permission denied 访问 tracing 目录

ftrace 需要 root 权限,且 debugfs 必须已经挂载:

# 检查 debugfs 是否挂载
mount | grep debugfs
# 如果没有挂载
sudo mount -t debugfs none /sys/kernel/debug

# 或者临时给权限
sudo chmod 777 /sys/kernel/debug/tracing

坑 2:trace 输出为空

先检查 tracing_on 是否为 1:

cat /sys/kernel/debug/tracing/tracing_on   # 应该输出 1
# 如果是 0
echo 1 > /sys/kernel/debug/tracing/tracing_on

还要检查 set_ftrace_filter 是否有内容(通配符写错或格式不对会导致过滤后无输出):

# 清空过滤器(追踪所有)
echo > /sys/kernel/debug/tracing/set_ftrace_filter

坑 3:追踪太勤快导致系统变慢

function_graph 追踪所有函数会产生大量开销。如果只想追踪特定函数,用 -F 参数指定过滤:

# 只追踪特定进程(而不是全局)
trace-cmd record -p function_graph -F -P 1234 ...

坑 4:函数名找不到

确认函数名正确(内核编译后可能有内联优化,函数名变了):

# 列出所有可追踪的函数
sudo cat /sys/kernel/debug/tracing/available_filter_functions | head -20
# 搜索特定函数
sudo cat /sys/kernel/debug/tracing/available_filter_functions | grep "^schedule$"

写在最后

ftrace 是 Linux 里最古老的原生追踪器,比 eBPF 早了整整 6 年。它的价值在于零门槛:不需要编译、不需要装包、不需要写代码——只要改几个文件就能看到内核的函数调用轨迹。

当你需要快速定位「卡在哪里」,ftrace 是第一选择;当你需要更复杂的过滤和计算,再上 eBPF。两者的关系不是替代,而是互补。

下篇预告:perf + FlameGraph——用 CPU 的「黑匣子」生成火焰图,3 分钟找出线上最热的代码路径。


相关阅读
- Linux Kernel Source: kernel/trace/ftrace.c — ftrace 核心实现
- Linux Kernel Source: kernel/trace/trace_functions_graph.c — function_graph 追踪器
- trace-cmd: trace-cmd.dat 录制格式和 trace-cmd report 使用
- Brendan Gregg 的博客和书籍(ftrace 权威资料)
- 本文 Demo: https://github.com/golang12306/os-kernel-from-scratch (demos/ftrace/)
- https://github.com/zhangfuwen/wandos — Linux 内核教程
- 下一篇:《从零写OS内核 | perf + FlameGraph——火焰图:让 CPU 热点一目了然》


仓库:https://github.com/golang12306/os-kernel-from-scratch

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 20:37:14 HTTP/2.0 GET : https://f.mffb.com.cn/a/491373.html
  2. 运行时间 : 0.367957s [ 吞吐率:2.72req/s ] 内存消耗:4,657.05kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=4bba8ede42ef36180099d50080aead14
  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.001209s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001541s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.005489s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000933s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001876s ]
  6. SELECT * FROM `set` [ RunTime:0.005490s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001533s ]
  8. SELECT * FROM `article` WHERE `id` = 491373 LIMIT 1 [ RunTime:0.034387s ]
  9. UPDATE `article` SET `lasttime` = 1783082235 WHERE `id` = 491373 [ RunTime:0.011065s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000788s ]
  11. SELECT * FROM `article` WHERE `id` < 491373 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.012467s ]
  12. SELECT * FROM `article` WHERE `id` > 491373 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.007708s ]
  13. SELECT * FROM `article` WHERE `id` < 491373 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.022022s ]
  14. SELECT * FROM `article` WHERE `id` < 491373 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.058107s ]
  15. SELECT * FROM `article` WHERE `id` < 491373 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.002526s ]
0.374518s