当前位置:首页>Linux>跟 AI 学 Linux:为什么需要 SO_LINGER 这种奇怪的 TCP 配置?

跟 AI 学 Linux:为什么需要 SO_LINGER 这种奇怪的 TCP 配置?

  • 2026-03-15 06:42:56
跟 AI 学 Linux:为什么需要 SO_LINGER 这种奇怪的 TCP 配置?

1. 议题

TCP 关闭连接,会经历四次挥手过程,主动关闭方进入 TIME_WAIT 状态,等待 2MSL 后释放资源。

这是教科书中对 TCP 连接关闭的解释,但是在 Linux 中有一个配置 SO_LINGER 打破了这一流程。

为什么需要这种特殊的配置?适合哪些场景?让我们请 AI 老师继续解惑。

2. 对话

2.1 问

我在看一些网络编程代码时,发现有些库默认开启了 SO_LINGER,我了解到该配置会打破正常的 TCP 关闭连接流程,请为我讲解 SO_LINGER 这一配置的来龙去脉,Linux 引入该配置的动机是什么?

2.2 答

SO_LINGER 是一个 socket 选项,用于控制当应用调用 close() 时,内核如何处理尚未发送完的数据以及 TCP 连接的关闭方式很多人第一次遇到它,都会发现它似乎"打破了 TCP 的正常关闭流程",其实它的设计目标正是:让应用程序能够控制 close 的语义(是立即返回还是等待发送完成)

TCP 的正常关闭流程(没有 SO_LINGER)

在标准 TCP 语义中,关闭连接是 优雅关闭(graceful close)

  1. 1. 应用调用 close()
  2. 2. 内核:
    • • 把发送缓冲区里的数据继续发完
    • • 发送 FIN
  3. 3. 对方 ACK
  4. 4. 对方发送 FIN
  5. 5. 本端 ACK
  6. 6. 进入 TIME_WAIT

也就是经典的 四次挥手

close() 并不意味着 TCP 连接已经彻底关闭,内核接管了剩余发送工作

问题:应用无法控制 close() 的语义

早期 BSD socket 设计里,close() 的行为有两个问题:

  1. 1. 应用不知道数据是否真正发送成功
  2. 2. 进程退出时资源清理不确定

某些程序希望立即终止连接

SO_LINGER 的设计目标

为了解决这些问题,BSD socket 引入了 SO_LINGER

结构:

struct linger {    int l_onoff;    int l_linger;};

提供 三种关闭策略

模式
行为
默认(关闭)
内核 graceful close
linger>0
阻塞 close 等待发送
linger=0
立即发送 RST

当 SO_LINGER > 0 时,其行为:

close()   ↓等待最多 N 秒   ↓直到:   - 数据发送完   - 收到 ACK   - 超时

如果超时,返回-1并设置 errno 为 ETIMEDOUT

当 SO_LINGER = 0 时,其行为:

close()   ↓发送 RST   ↓丢弃发送缓冲区   ↓连接立即销毁

不会发送 FIN,也不会进入 TIME_WAIT 状态。

这是刻意设计的 abort 机制

为什么有些库"默认开启 SO_LINGER"

实际上绝大多数库不会主动开启,但你看到"开启 SO_LINGER"的情况通常是设置 SO_LINGER = 0

主要原因是:当连接异常时,RST 比 FIN 更快释放资源,这可以避免 TIME_WAIT 过多累积。

一句话总结

SO_LINGER 的本质是:控制 close() 如何映射到 TCP 关闭行为

Linux 引入(继承 BSD)的核心动机是:解决 应用 close() 语义 与 TCP 异步关闭机制 的冲突。

2.3 思考

我理解了 SO_LINGER 的动机和机制,但是

  • • 「应用不知道数据是否真正发送成功」 这应该是应用层解决的问题;
  • • 「进程退出时资源清理不确定」 这不应该是应用层关注的问题。

SO_LINGER 不是一个合适的解法,但是「TIME_WAIT 累积」确实是个问题,Linux 就没有更好的解法吗?

继续追问 AI 老师。

2.4 问

对于 TIME_WAIT 累积,快速释放资源,Linux 就没有更好的解法吗?

2.5 答

有,而且大多数情况下根本不需要依赖 SO_LINGER=0 这种"暴力手段"Linux 在 TCP 设计、内核参数、应用架构三个层面都提供了更合理的解决方案。实际上,生产系统中解决 TIME_WAIT 过多 的方法通常按优先级是这样的:

架构优化  >  TCP 参数调优  >  端口/连接复用  >  (极少) abort close

首先要理解

TIME_WAIT 不是 bug,而是 TCP 正确性的核心机制。

它保证两件事:

  1. 1. 旧连接的延迟报文不会污染新连接
  2. 2. 最后的 ACK 丢失可以重发

所以完全消灭 TIME_WAIT 是不正确的目标正确的目标是让 TIME_WAIT 不影响资源

第一层解决方案:让服务器不要主动关闭

这是互联网服务器最常用的办法。

TIME_WAIT 在客户端,服务器压力消失。

第二层:连接复用

TIME_WAIT 过多通常意味着:短连接过多。

最根本的解决方案:减少连接创建。

典型技术:

  1. 1. HTTP KeepAlive
  2. 2. HTTP/2
  3. 3. 连接池

第三层:Linux 内核优化

tcp_tw_reuse
net.ipv4.tcp_tw_reuse = 1

当新连接时间戳大于旧连接时,允许 TIME_WAIT socket 被重新利用

tcp_fin_timeout
net.ipv4.tcp_fin_timeout

默认 60,可以调低,但不能太小。

可以更快释放处于 FIN_WAIT_2 的孤儿 Socket 资源。

扩大端口范围
net.ipv4.ip_local_port_range

这样 TIME_WAIT 更不容易耗尽端口。

第四层:更现代的协议

现代互联网很多协议已经绕过这个问题,例如 QUIC。

一句话总结

Linux 解决 TIME_WAIT 的正确策略是:

  • • 减少短连接
  • • 连接复用
  • • tcp_tw_reuse
  • • 扩大端口范围

2.6 思考

「TIME_WAIT 不是 Bug,而是核心机制。」

AI 老师这句话说得真好!

3. 实验

关键代码:

void set_so_linger_zero(int sockfd) {struct linger linger_opt;    linger_opt.l_onoff = 1;   /* Enable SO_LINGER */    linger_opt.l_linger = 0;  /* Linger time = 0 */    if (setsockopt(sockfd, SOL_SOCKET, SO_LINGER, &linger_opt, sizeof(linger_opt)) < 0) {        perror("setsockopt(SO_LINGER)");        exit(EXIT_FAILURE);    }}

客户端设置 SO_LINGER = 0,tcpdump 抓包:

23:51:38.414443 IP 127.0.0.1.40854 > 127.0.0.1.8888: Flags [S], seq 2975794497, win 43690, options [mss 65495,sackOK,TS val 855851546 ecr 0,nop,wscale 10], length 023:51:38.414452 IP 127.0.0.1.8888 > 127.0.0.1.40854: Flags [S.], seq 1521860988, ack 2975794498, win 43690, options [mss 65495,sackOK,TS val 855851546 ecr 855851546,nop,wscale 10], length 023:51:38.414458 IP 127.0.0.1.40854 > 127.0.0.1.8888: Flags [.], ack 1521860989, win 43, options [nop,nop,TS val 855851546 ecr 855851546], length 023:51:38.414492 IP 127.0.0.1.40854 > 127.0.0.1.8888: Flags [P.], seq 2975794498:2975794504, ack 1521860989, win 43, options [nop,nop,TS val 855851546 ecr 855851546], length 623:51:38.414495 IP 127.0.0.1.8888 > 127.0.0.1.40854: Flags [.], ack 2975794504, win 43, options [nop,nop,TS val 855851546 ecr 855851546], length 023:51:38.414513 IP 127.0.0.1.8888 > 127.0.0.1.40854: Flags [P.], seq 1521860989:1521861006, ack 2975794504, win 43, options [nop,nop,TS val 855851546 ecr 855851546], length 1723:51:38.414517 IP 127.0.0.1.40854 > 127.0.0.1.8888: Flags [.], ack 1521861006, win 43, options [nop,nop,TS val 855851546 ecr 855851546], length 023:51:38.414520 IP 127.0.0.1.8888 > 127.0.0.1.40854: Flags [P.], seq 1521861006:1521861012, ack 2975794504, win 43, options [nop,nop,TS val 855851546 ecr 855851546], length 623:51:38.414522 IP 127.0.0.1.40854 > 127.0.0.1.8888: Flags [.], ack 1521861012, win 43, options [nop,nop,TS val 855851546 ecr 855851546], length 023:51:38.414539 IP 127.0.0.1.40854 > 127.0.0.1.8888: Flags [R.], seq 2975794504, ack 1521861012, win 43, options [nop,nop,TS val 855851546 ecr 855851546], length 0

客户端最后直接发送了一个 RST 包。

服务端设置 SO_LINGER = 0,tcpdump 抓包:

23:57:33.950675 IP 127.0.0.1.45936 > 127.0.0.1.8888: Flags [S], seq 3408802811, win 43690, options [mss 65495,sackOK,TS val 856207082 ecr 0,nop,wscale 10], length 023:57:33.950680 IP 127.0.0.1.8888 > 127.0.0.1.45936: Flags [S.], seq 2475716703, ack 3408802812, win 43690, options [mss 65495,sackOK,TS val 856207082 ecr 856207082,nop,wscale 10], length 023:57:33.950687 IP 127.0.0.1.45936 > 127.0.0.1.8888: Flags [.], ack 2475716704, win 43, options [nop,nop,TS val 856207082 ecr 856207082], length 023:57:33.950707 IP 127.0.0.1.45936 > 127.0.0.1.8888: Flags [P.], seq 3408802812:3408802818, ack 2475716704, win 43, options [nop,nop,TS val 856207082 ecr 856207082], length 623:57:33.950710 IP 127.0.0.1.8888 > 127.0.0.1.45936: Flags [.], ack 3408802818, win 43, options [nop,nop,TS val 856207082 ecr 856207082], length 023:57:33.950763 IP 127.0.0.1.8888 > 127.0.0.1.45936: Flags [R.], seq 2475716704, ack 3408802818, win 43, options [nop,nop,TS val 856207082 ecr 856207082], length 0

服务端最后直接发送了一个 RST 包。

4. 内核实现

4.1 任务

请梳理 @net/ 目录下 linger、tcp_tw_reuse、tcp_fin_timeout 相关的源码,生成报告。

4.2 报告

内核版本: Linux 5.15.198相关目录:net/include/net/kernel/

完成的报告在 06_SO_LINGER_REPORT.md,这里仅总结关键点。

SO_LINGER 处理流程

用户空间    │ setsockopt(SOL_SOCKET, SO_LINGER, &linger, ...)    ▼net/core/sock.c: sock_setsockopt()    │ case SO_LINGER    │ ├─ 设置 sock_flag(sk, SOCK_LINGER)    │ └─ 设置 sk->sk_lingertime    ▼用户空间    │ close(sockfd)    ▼net/ipv4/tcp.c: tcp_close()    │ 检查 sock_flag(sk, SOCK_LINGER)    │    ├─ l_linger = 0 → tcp_send_active_reset() [硬关闭]    │    └─ l_linger > 0 → 等待超时或数据发送完成

tcp_tw_reuse 检查流程

新建连接 (connect())    │    ▼检查端口是否被TIME_WAIT占用    │    ▼net/ipv4/tcp_ipv4.c: tcp_twsk_unique()    │    ├─ 检查 tw_substate == TCP_FIN_WAIT2    │   └─ 是 → 禁止重用    │    ├─ 检查 tcp_tw_reuse 值    │   │    │   ├─ 0 → 禁止重用    │   │    │   └─ 2 → 检查环回接口    │       └─ 非环回 → 禁止重用    │    ├─ 检查时间戳 (PAWS)    │   └─ 时间戳不安全 → 禁止重用    │    └─ 调整序列号        └─ write_seq = old_seq + 65535 + 2

tcp_fin_timeout 超时流程

进入FIN_WAIT2状态    │    ▼include/net/tcp.h: tcp_fin_time()    │    ├─ 使用 tp->linger2 (如果设置)    │    └─ 使用 sysctl_tcp_fin_timeout    │    ├─ 确保最小值 >= 3.5 * RTO    │    └─ 返回超时值    │    ▼net/ipv4/tcp.c: tcp_close()    │    ├─ tmo > TCP_TIMEWAIT_LEN (60秒)    │   └─ 设置 keepalive 定时器    │    └─ tmo <= 60秒        └─ tcp_time_wait(sk, TCP_FIN_WAIT2, tmo)            │            └─ 创建TIME_WAIT socket                │                └─ 调度超时定时器

1. https://gitee.com/shichaoyuan/learn-linux-with-ai↩︎

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-27 20:51:32 HTTP/2.0 GET : https://f.mffb.com.cn/a/480111.html
  2. 运行时间 : 0.161828s [ 吞吐率:6.18req/s ] 内存消耗:4,923.20kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=85bc76de7671ba9f58bff7f987d03d43
  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.000382s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000591s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000843s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.011359s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000553s ]
  6. SELECT * FROM `set` [ RunTime:0.003378s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000609s ]
  8. SELECT * FROM `article` WHERE `id` = 480111 LIMIT 1 [ RunTime:0.003436s ]
  9. UPDATE `article` SET `lasttime` = 1774615892 WHERE `id` = 480111 [ RunTime:0.003890s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000544s ]
  11. SELECT * FROM `article` WHERE `id` < 480111 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000770s ]
  12. SELECT * FROM `article` WHERE `id` > 480111 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001926s ]
  13. SELECT * FROM `article` WHERE `id` < 480111 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.017312s ]
  14. SELECT * FROM `article` WHERE `id` < 480111 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.020805s ]
  15. SELECT * FROM `article` WHERE `id` < 480111 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.020312s ]
0.163365s