当前位置:首页>Linux>深入 mmap:被严重低估的 Linux 黑科技,MySQL/Redis/Nginx 都在用它

深入 mmap:被严重低估的 Linux 黑科技,MySQL/Redis/Nginx 都在用它

  • 2026-03-11 00:25:03
深入 mmap:被严重低估的 Linux 黑科技,MySQL/Redis/Nginx 都在用它

大家好,我是小康。

先来问你一个问题。

你打开浏览器,看一个网页,数据从服务器到你眼前,经历了多少次"复制"?

你用 MySQL 查一条数据,从磁盘到你拿到结果,数据被搬运了几次?

答案出乎很多人意料:至少 4 次

而且其中有 2 次,是完全可以省掉的。

省掉它的技术,叫做 mmap

MySQL、Redis、Nginx、你每天运行的每一个程序——背后全靠它。

但 99% 的程序员,写了十年代码,也没真正理解过它。

注意:PC端阅读,图解会更清楚些!

先说说,没有 mmap 之前有多慢

你平时读文件,代码可能就这一行:

read(fd, buf, 4096);

看起来很简单。但背后发生了什么?

磁盘 │ │  第①次拷贝(DMA 搬运) ▼内核缓冲区(Page Cache) │ │  第②次拷贝(内核 → 你的程序) ▼你的 buf[]

数据被复制了两次。

读完还要写回?再来两次。一次完整的读写,数据至少被搬了 4 次。

对于小文件,感知不到。但你想想 MySQL 每秒处理几万次查询,Redis 扛着几十万 QPS,Nginx 一次发送一个 500MB 的视频文件……

4 次拷贝,是系统性能的天花板。

mmap 做了一件听起来很简单、但很优雅的事

它的核心思想只有一句话:

把文件直接映射到你的程序内存里,读写内存 = 读写文件,中间那次拷贝,消失了。

对比一下:

传统 read():

┌──────────┐  拷贝①  ┌──────────┐  拷贝②  ┌──────────┐│   磁盘   │ ──────► │ 页缓存   │ ──────► │ 用户buf  │└──────────┘         └──────────┘         └──────────┘                      (内核空间)            (用户空间)                                              ↑                                           多了这次拷贝!

mmap:

┌──────────┐  拷贝①  ┌──────────┐│   磁盘   │ ──────► │ 页缓存   │└──────────┘         └────┬─────┘                          │  直接映射(零拷贝!)                          ▼                     ┌──────────┐                     │ 进程虚拟 │                     │ 地址空间 │  ← 用户直接读写这里                     └──────────┘

你的程序直接"看到"的,就是内核里的那份数据。

省掉了第②次拷贝,这就是 mmap 零拷贝的本质。

mmap 用起来是什么感觉?

函数签名:

void *mmap(void *addr,    // 映射到哪(传 NULL 让内核决定)size_t length, // 映射多少字节int prot,      // 权限(读/写/执行)int flags,     // 关键参数,下面讲int fd,        // 文件描述符off_t offset)// 从文件哪里开始映射

flags 是灵魂,就两组:

MAP_SHARED   → 修改会同步回文件,其他进程也能看到MAP_PRIVATE  → 写时复制,你改了不影响原文件MAP_ANONYMOUS → 不关联文件,纯粹申请内存(fd 传 -1)

四种组合,覆盖了 mmap 的所有核心用法:

组合
用途
MAP_SHARED + 文件
读写文件,改动自动刷盘(数据库爱用)
MAP_PRIVATE + 文件
加载动态库、程序代码段
MAP_SHARED + ANONYMOUS
父子进程共享内存(现代 IPC)
MAP_PRIVATE + ANONYMOUS
malloc 大内存时底层就是这个

四种用法,一次全搞懂

用法一:读一个大文件

传统方式,你要循环 read(),管理 buf,处理边界条件。

mmap 的方式:

int fd = open("data.bin", O_RDONLY);structstatst;fstat(fd, &st);// 把整个文件映射进来char *p = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0);close(fd);  // 映射建立后,fd 可以关了// 直接用指针读,像操作数组一样printf("文件头:%02x %02x %02x %02x\n", p[0], p[1], p[2], p[3]);printf("第1000个字节:%c\n", p[1000]);munmap(p, st.st_size);

想随机跳到任意位置?直接 p[offset],不需要 lseek。

内核自动管理缓存,你不需要操心任何缓冲区。

用法二:修改文件内容(MAP_SHARED 写回)

int fd = open("data.bin", O_RDWR);ftruncate(fd, 1024);  // 先确保文件有这么大char *p = mmap(NULL1024, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);// 直接写,内核会自动同步回磁盘p[0] = 'H';p[1] = 'i';// 想立刻刷盘,不等内核调度?msync(p, 1024, MS_SYNC);  // 同步等待刷完munmap(p, 1024);close(fd);

这就是 SQLite 的底层原理。 它直接 mmap 数据库文件,修改内存页,让操作系统负责刷盘,省掉大量 write() 系统调用。

用法三:父子进程共享内存

以前用 shmget 那套 System V 接口,又丑又麻烦,还得手动清理内核资源。

现代写法:

// 在 fork() 前创建,子进程自动继承int *shared = mmap(NULLsizeof(int),                   PROT_READ | PROT_WRITE,                   MAP_SHARED | MAP_ANONYMOUS,-10);*shared = 0;if (fork() == 0) {    *shared = 42;            // 子进程写入printf("子进程写:%d\n", *shared);else {    wait(NULL);printf("父进程读到:%d\n", *shared);  // 输出 42}munmap(shared, sizeof(int));  // 进程退出自动释放,无需手动清理

简洁、优雅、不留垃圾。

用法四:你每天都在用,但完全不知道

当你敲下 ./my_program 执行一个程序,内核是怎么把代码加载进内存的?

答案:mmap。

ELF 可执行文件(磁盘)┌──────────────────┐│ .text  代码段    │ ──→ MAP_PRIVATE mmap ──→ 进程虚拟空间[代码段]│ .rodata 只读数据 │ ──→ MAP_PRIVATE mmap ──→ 进程虚拟空间[只读段]│ .data  数据段    │ ──→ MAP_PRIVATE mmap ──→ 进程虚拟空间[数据段]└──────────────────┘动态库 libc.so│                  │ ──→ MAP_SHARED  mmap ──→ 所有进程共享同一份代码页

为什么用 MAP_PRIVATE?

写时复制(Copy-on-Write)。 100 个进程都用 libc,代码页只有一份物理内存。谁要写(比如重定位 GOT 表),内核才给它复制一份。

这就是为什么你开 100 个 Nginx worker,内存占用远比 100 × 单进程小。

mmap 最聪明的地方:它是懒的

mmap 调用本身非常快。

它不会立刻把文件读进内存——它只是在你的进程地址空间"占了个位置",然后什么都不做。

调用 mmap()    ↓在进程虚拟地址空间登记一段映射(物理内存:什么都没发生)    ↓你第一次访问 p[0]    ↓CPU 触发【缺页中断】(Page Fault)    ↓内核:把文件对应那 4KB 从磁盘读进 Page Cache,建立映射    ↓你的程序继续执行,感知不到任何中断

映射 1GB 的文件,只有你真正访问过的页才会占内存。 其余的,一直在磁盘上睡觉。

如果你知道自己要顺序读,可以提前告诉内核预热:

madvise(p, size, MADV_SEQUENTIAL);  // 告诉内核:我要顺序读,提前预读madvise(p, size, MADV_DONTNEED);    // 告诉内核:这段我不需要了,释放吧

写时复制:fork 为什么这么快?

MAP_PRIVATE 有个让人拍案叫绝的机制:写时复制(COW)

char *p = mmap(NULL, size, PROT_READ | PROT_WRITE,               MAP_PRIVATE, fd, 0);p[0] = 'X';  // 这个修改,不会写回文件

发生了什么:

初始:进程 A 的虚拟地址 ──指向──→ 原始物理页(文件内容)写入 p[0] = 'X' 时:  ① 内核偷偷复制一份新的物理页  ② 把进程 A 的页表指向新页  ③ 在新页上写入 'X'  ④ 原始文件的物理页,纹丝不动进程 A 看到的:已修改的副本文件里的:原始内容,未受影响

fork() 就是用这个机制实现的。

子进程创建时,和父进程共享所有物理内存页,谁也不复制。只有某一方真正写入时,内核才复制那一页。

Redis 的 RDB 快照就靠这个。 fork 一个子进程去写磁盘,父进程继续服务请求,父进程修改的内存页才会被复制,其余共享。这就是 Redis 在做快照时几乎无停顿的秘密。


谁在用 mmap?(你每天都在打交道的)

MySQL / InnoDB

InnoDB 的 Buffer Pool 用 mmap 分配大块内存,读写数据文件时直接操作内存页,操作系统负责脏页刷盘,大量减少 write() 系统调用开销。

Redis

fork 子进程做 RDB 快照,父子进程内存页通过 COW 共享。主进程几乎无停顿,子进程慢慢把数据写到磁盘。全靠 mmap + COW 的魔法。

Nginx

Nginx 的多个 worker 进程之间需要共享状态数据——比如限流计数、SSL session 缓存、连接数统计。这些共享数据区域,底层全是用 mmap(MAP_SHARED | MAP_ANONYMOUS) 分配的,让所有 worker 看到同一块内存,不需要进程间通信。

顺带一提,Nginx 发送静态文件用的是另一个技术 sendfile——直接在内核态把数据送到网卡,比 mmap 更彻底的零拷贝,两者是独立的机制,各司其职。

你的每一行代码

你写的每一个 C/C++ 程序跑起来,代码段、数据段、所有动态库——都是被 mmap 进来的,不是 read 进来的。

你用 malloc 申请超过 128KB 的内存?glibc 底层用的是 mmap(MAP_PRIVATE | MAP_ANONYMOUS),不是 brk()。

mmap 无处不在,只是你没注意到。

使用 mmap 的几个大坑,别踩

坑1:映射空文件会 SIGBUS

//  错误:文件是空的,一访问就崩int fd = open("new.dat", O_RDWR | O_CREAT, 0666);char *p = mmap(NULL4096, PROT_WRITE, MAP_SHARED, fd, 0);p[0] = 'a';  //  SIGBUS//  正确:先设置文件大小ftruncate(fd, 4096);char *p = mmap(NULL4096, PROT_WRITE, MAP_SHARED, fd, 0);p[0] = 'a';  // OK

坑2:offset 必须是页大小的整数倍

long page_size = sysconf(_SC_PAGESIZE);  // 通常是 4096mmap(NULL, len, PROT_READ, MAP_SHARED, fd, page_size * 2);  // 正确mmap(NULL, len, PROT_READ, MAP_SHARED, fd, 100);            // 有问题: EINVAL

坑3:munmap 之后指针就是野指针

char *p = mmap(...);munmap(p, size);char c = p[0];  //  Segfault,未定义行为

坑4:小文件用 mmap 反而更慢

mmap 建立映射、处理缺页中断都有开销。文件小于几十KB,老实用 read() 就好。mmap 的优势在大文件、随机访问、多进程共享。

mmap vs 传统 read/write,一张表看懂

场景
read/write
mmap
小文件顺序读(< 64KB)
更快
建立映射有开销
大文件顺序读(> 1MB)
一般
省一次拷贝
大文件随机访问
反复 lseek
直接指针偏移
多进程共享同一文件
各自拷贝一份
共享同一 Page Cache
数据库/KV 存储引擎
工业界主流选择
修改写回文件
需要 write()
自动脏页回写

最后,一句话把 mmap 讲透

传统 I/O:磁盘 ──DMA──→ 内核 Page Cache ──CPU拷贝──→ 你的 buf[]                                  ↑                              这次可以省掉mmap:磁盘 ──DMA──→ 内核 Page Cache                    ↕ 页表映射(零拷贝)               你的程序直接"看到"这里

mmap 不是什么神秘的黑科技,它的本质是:用虚拟内存的页表映射,替代数据拷贝。

理解了 mmap,你就理解了:

  • 为什么数据库要直接操作内存页,而不是反复 read/write
  • 为什么 100 个进程用同一个库,内存不会乘以 100
  • 为什么 Redis fork 之后主进程几乎不卡顿
  • 为什么 Linux 上运行一个程序比你想象中快得多

虚拟内存、物理内存、文件系统——这三者在 Linux 里是被统一在同一套机制下管理的。

而 mmap,就是打通它们的那把钥匙。

小康最近开设C++项目课程:

如果你读完这篇还觉得 C、C++、Linux 有些陌生,别急——我也开设了这三门入门课程,从零带你打好地基,快速上手项目实战:

如果你已经有一定基础,想冲击更高的天花板,那下面这些工业级 C++ 项目正是为你准备的:

不讲玩具代码,全是工业级项目

项目
亮点
线程池
经典并发基础设施
高性能日志库 MiniSpdlog
对标 spdlog
高性能内存池
彻底告别 malloc 瓶颈
多线程下载工具
分片并发实战
MySQL 连接池
数据库高并发必备
内存泄漏检测器
Hook malloc/free 原理
ReactorX
高性能事件驱动框架
无锁栈 / 无锁队列(SPSC/MPMC)
无锁编程精髓
工业级智能指针(shared_ptr)
手写引用计数
高性能网络库 NetCore
从 epoll 到框架
高性能异步日志库 ZephyrLog
异步 + 无锁
死锁检测工具
图算法实战
高性能 HTTP 服务器
性能吊打大多数开源项目
协程库 CoroForge
对标微信 libco
高性能 HTTP 压测工具
参考 wrk 实现
Redis 核心模块实战
从 0 到 1 实现

每个项目都是真实可用的工程代码,不是教学玩具。

👉 点击查看上面完整C++项目课程介绍

  • 对C++项目实战课程感兴趣的朋友,可以扫下方二维码添加小康微信(或微信搜索:jkfwdkf 
  • 备注「 项目实战 」

觉得有帮助,点赞在看转发,让更多程序员看到 🙏


下篇预告:Linux 零拷贝全解析 —— 内核是怎么让数据"自己流动"的?


觉得有收获,点赞、在看、转发给需要的人 🙏

每一个理解了底层的工程师,写出来的代码都不一样。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-27 14:49:06 HTTP/2.0 GET : https://f.mffb.com.cn/a/479034.html
  2. 运行时间 : 0.171967s [ 吞吐率:5.82req/s ] 内存消耗:4,585.77kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=59885766455e65b67995b027afedf35b
  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.001105s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001622s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000727s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000675s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001333s ]
  6. SELECT * FROM `set` [ RunTime:0.000573s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001481s ]
  8. SELECT * FROM `article` WHERE `id` = 479034 LIMIT 1 [ RunTime:0.004093s ]
  9. UPDATE `article` SET `lasttime` = 1774594146 WHERE `id` = 479034 [ RunTime:0.014098s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000682s ]
  11. SELECT * FROM `article` WHERE `id` < 479034 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001191s ]
  12. SELECT * FROM `article` WHERE `id` > 479034 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001116s ]
  13. SELECT * FROM `article` WHERE `id` < 479034 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.002421s ]
  14. SELECT * FROM `article` WHERE `id` < 479034 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000834s ]
  15. SELECT * FROM `article` WHERE `id` < 479034 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.008527s ]
0.173692s