当前位置:首页>Linux>Linux内存映射: 从原理到实践的深度剖析

Linux内存映射: 从原理到实践的深度剖析

  • 2026-01-12 01:03:05
Linux内存映射: 从原理到实践的深度剖析

Linux内存映射: 从原理到实践的深度剖析

引言: 为什么需要内存映射?

想象一下你正在管理一个巨大的仓库(物理内存), 但仓库本身杂乱无章, 直接在里面找东西效率极低. 这时你会创建一个智能目录系统(虚拟内存), 每个物品都有固定编号, 找东西时先查目录, 目录告诉你物品实际在哪个货架哪个位置——这就是内存映射的核心思想

作为Linux内核的核心机制之一, 内存映射不仅提供了进程隔离的安全保障, 更通过巧妙的间接访问机制, 让有限物理内存得以高效支持近乎无限的虚拟地址空间. 今天, 我们将深入Linux内存映射的每一个角落

第一章: 内存映射基础概念

1.1 虚拟内存与物理内存的关系

虚拟内存是进程看到的连续地址空间, 从0到4GB(32位)或更大(64位). 物理内存是实际的RAM硬件. 两者通过页表建立映射关系

生活比喻: 虚拟内存就像餐厅的菜单(连续编号的菜品), 物理内存是厨房的实际食材. 顾客(进程)点菜只看菜单号, 厨师(MMU)根据号码找到实际食材位置

1.2 内存映射的三种基本类型

类型
数据来源
共享性
典型应用
生命周期
文件映射
磁盘文件
私有/共享
加载动态库、mmap文件I/O
可持久化
匿名映射
全零页/交换空间
私有/共享
malloc大内存、进程栈
进程结束消失
共享内存映射
内存区域
共享
IPC共享内存、X服务器
显式销毁

第二章: 核心数据结构深度解析

2.1 进程地址空间描述符: mm_struct

每个进程都有独立的地址空间, 由mm_struct描述:

// include/linux/mm_types.h 精简版struct mm_struct {struct {struct vm_area_struct *mmap;        // VMA链表头struct rb_root mm_rb;               // VMA红黑树根        unsigned long task_size;            // 地址空间大小        pgd_t *pgd;                         // 页全局目录        unsigned long start_code, end_code; // 代码段边界        unsigned long start_data, end_data; // 数据段边界        unsigned long start_brk, brk;       // 堆边界        unsigned long start_stack;          // 栈起始        unsigned long arg_start, arg_end;   // 命令行参数        unsigned long env_start, env_end;   // 环境变量    } __randomize_layout;    atomic_t mm_users;      // 使用该地址空间的用户数    atomic_t mm_count;      // 主引用计数struct list_head mmlist; // 所有mm_struct链表};

2.2 虚拟内存区域: vm_area_struct (VMA)

VMA描述虚拟地址空间中一段连续的、具有相同访问属性的区域

struct vm_area_struct {    unsigned long vm_start;     // 区域起始地址    unsigned long vm_end;       // 区域结束地址struct mm_struct *vm_mm;    // 所属地址空间    // 权限标志    pgprot_t vm_page_prot;    unsigned long vm_flags;     // VM_READ, VM_WRITE, VM_EXEC等struct rb_node vm_rb;       // 红黑树节点    // 链表连接struct vm_area_struct *vm_next, *vm_prev;    // 文件相关信息(文件映射时使用)struct file *vm_file;    unsigned long vm_pgoff;     // 文件内偏移(页单位)    // 操作函数集    conststruct vm_operations_struct *vm_ops;    // 匿名映射相关信息struct anon_vma *anon_vma;  // 匿名映射管理结构};

关键点: Linux同时用链表(便于遍历)和红黑树(快速查找特定地址)管理VMA. 查找地址属于哪个VMA时, 红黑树的O(log n)效率远高于链表的O(n)

2.3 页表项: pte_t 与多级页表

以x86-64为例, 采用4级页表结构:

虚拟地址分解: 63-48   47-39   38-30   29-21   20-12   11-0保留位   PGD索引 PUD索引 PMD索引 PTE索引 页内偏移
// 页表项标志位(部分)#define _PAGE_PRESENT   0x001   // 页在内存中#define _PAGE_RW        0x002   // 可写#define _PAGE_USER      0x004   // 用户空间可访问#define _PAGE_ACCESSED  0x020   // 已被访问#define _PAGE_DIRTY     0x040   // 已被写入#define _PAGE_FILE      0x800   // 文件映射页(非Present时)

第三章: 内存映射的工作机制

3.1 mmap系统调用全流程

// mm/mmap.c 核心逻辑简化SYSCALL_DEFINE6(mmap, unsigned long, addr, unsigned long, len,                unsigned long, prot, unsigned long, flags,                unsigned long, fd, unsigned long, off){    // 1. 参数检查和调整    len = PAGE_ALIGN(len);  // 按页对齐    // 2. 获取文件指针(文件映射时)struct file *file = NULL;    if (flags & MAP_SHARED) {        file = fget(fd);    }    // 3. 调用内核实际处理函数    addr = vm_mmap_pgoff(file, addr, len, prot, flags, off >> PAGE_SHIFT);    // 4. 返回映射的虚拟地址    return addr;}

3.2 缺页异常处理: 按需分配的魔法

核心思想: Linux采用**延迟分配(Lazy Allocation)**策略, mmap时只建立虚拟映射, 实际物理页在首次访问时通过缺页异常分配

// mm/memory.c 缺页处理核心(极度简化)static vm_fault_t handle_mm_fault(struct vm_area_struct *vma,                                  unsigned long address,                                  unsigned int flags){    // 1. 查找各级页表项    pgd_t *pgd = pgd_offset(vma->vm_mm, address);    p4d_t *p4d = p4d_alloc(vma->vm_mm, pgd, address);    pud_t *pud = pud_alloc(vma->vm_mm, p4d, address);    pmd_t *pmd = pmd_alloc(vma->vm_mm, pud, address);    if (!pmd)        return VM_FAULT_OOM;    // 2. 处理页表中间目录    if (pmd_none(*pmd)) {        // 中间目录为空, 需要分配新页表        pte_t *new_pte = pte_alloc_one(vma->vm_mm);        pmd_populate(vma->vm_mm, pmd, new_pte);    }    // 3. 处理实际页表项    pte_t *pte = pte_offset_map(pmd, address);    if (pte_none(*pte)) {        // 页不存在, 需要分配页面        return do_anonymous_page(vma, address, pte, flags);    } else if (pte_present(*pte)) {        // 页存在但可能涉及写时复制        return do_wp_page(vma, address, pte, flags);    }    // 4. 文件映射的特殊处理    if (vma->vm_ops && vma->vm_ops->fault) {        return vma->vm_ops->fault(vma, address, flags);    }    return VM_FAULT_SIGBUS;  // 不应该到达这里}

3.3 文件映射 vs 匿名映射的底层差异

文件映射的页面缓存机制:

关键数据结构:

struct page {    unsigned long flags;        // 页面状态标志struct address_space *mapping;  // 指向地址空间(文件映射时)    pgoff_t index;              // 页面在文件中的偏移    void *private;              // 私有数据    atomic_t _mapcount;         // 映射计数    atomic_t _refcount;         // 引用计数};

当多个进程映射同一文件时, 内核通过Page Cache共享页面, 避免重复磁盘读取

第四章: 高级内存映射特性

4.1 写时复制(Copy-on-Write, COW)

生活比喻: 父子分家前共用一本账本(共享物理页), 当一方要修改账目时, 才复印一份(分配新页)各自修改

内核实现关键:

static vm_fault_t do_wp_page(struct vm_area_struct *vma,                             unsigned long address,                             pte_t *page_table){struct page *old_page, *new_page;    // 获取原页面    old_page = vm_normal_page(vma, address, *page_table);    // 如果页面只被一个进程引用, 直接改为可写    if (page_mapcount(old_page) == 1) {        pte_t new_pte = pte_mkyoung(*page_table);        new_pte = pte_mkdirty(new_pte);        new_pte = pte_mkwrite(new_pte);        set_pte_at(vma->vm_mm, address, page_table, new_pte);        return VM_FAULT_WRITE;    }    // 多个引用, 需要复制    new_page = alloc_page_vma(GFP_HIGHUSER_MOVABLE, vma, address);    // 复制页面内容    copy_user_highpage(new_page, old_page, address, vma);    // 更新页表: 原页只读, 新页可写    pte_t new_pte = mk_pte(new_page, vma->vm_page_prot);    new_pte = pte_mkyoung(new_pte);    new_pte = pte_mkdirty(new_pte);    new_pte = pte_mkwrite(new_pte);    set_pte_at(vma->vm_mm, address, page_table, new_pte);    // 减少原页引用    page_remove_rmap(old_page, false);    return VM_FAULT_WRITE;}

4.2 大页(Huge Pages)映射

传统4KB页表的问题: TLB覆盖范围有限. 大页(通常2MB或1GB)减少TLB Miss, 提升性能

// 使用大页的mmap示例addr = mmap(NULL, 2*1024*1024, PROT_READ|PROT_WRITE,            MAP_PRIVATE|MAP_ANONYMOUS|MAP_HUGETLB,            -1, 0);

大页管理:

# 查看大页信息$ cat /proc/meminfo | grep HugeHugePages_Total:       0HugePages_Free:        0HugePages_Rsvd:        0HugePages_Surp:        0Hugepagesize:       2048 kB# 预留大页$ echo 20 > /proc/sys/vm/nr_hugepages

4.3 内存映射的同步机制

msync系统调用: 确保映射内容与磁盘同步

int msync(void *addr, size_t length, int flags);
标志
含义
性能影响
MS_SYNC
同步写, 等待完成
高延迟, 数据安全
MS_ASYNC
异步写, 立即返回
低延迟, 可能丢失
MS_INVALIDATE
使缓存无效
强制重新读取

第五章: 实战应用与性能分析

5.1 使用mmap加速文件读取

#include <sys/mman.h>#include <sys/stat.h>#include <fcntl.h>#include <stdio.h>#include <unistd.h>int main(int argc, char *argv[]) {    if (argc != 2) {        fprintf(stderr, "Usage: %s <file>\n", argv[0]);        return 1;    }    // 传统read方式struct timespec start, end;    clock_gettime(CLOCK_MONOTONIC, &start);    int fd = open(argv[1], O_RDONLY);struct stat sb;    fstat(fd, &sb);    char *buf = malloc(sb.st_size);    read(fd, buf, sb.st_size);    // 处理数据...    for (off_t i = 0; i < sb.st_size; i++) {        buf[i] = buf[i] + 1;  // 示例操作    }    free(buf);    close(fd);    clock_gettime(CLOCK_MONOTONIC, &end);    double read_time = (end.tv_sec - start.tv_sec) +                       (end.tv_nsec - start.tv_nsec) / 1e9;    // mmap方式    clock_gettime(CLOCK_MONOTONIC, &start);    fd = open(argv[1], O_RDONLY);    fstat(fd, &sb);    char *mapped = mmap(NULL, sb.st_size, PROT_READ|PROT_WRITE,                       MAP_PRIVATE, fd, 0);    // 处理数据...    for (off_t i = 0; i < sb.st_size; i++) {        mapped[i] = mapped[i] + 1;  // 触发写时复制    }    munmap(mapped, sb.st_size);    close(fd);    clock_gettime(CLOCK_MONOTONIC, &end);    double mmap_time = (end.tv_sec - start.tv_sec) +                       (end.tv_nsec - start.tv_nsec) / 1e9;    printf("read() time: %.6f seconds\n", read_time);    printf("mmap() time: %.6f seconds\n", mmap_time);    printf("Speedup: %.2fx\n", read_time / mmap_time);    return 0;}

性能对比结果(典型情况):

文件大小
read()时间
mmap()时间
加速比
适用场景
1MB
0.0021s
0.0018s
1.17x
小文件优势不明显
100MB
0.215s
0.142s
1.51x
中等文件有明显优势
1GB
2.31s
1.26s
1.83x
大文件优势显著
10GB
25.4s
12.8s
1.98x
超大文件接近2倍

5.2 进程间共享内存通信

// writer.c#include <sys/mman.h>#include <fcntl.h>#include <unistd.h>#include <string.h>#include <stdio.h>struct shared_data {    int counter;    char message[256];};int main() {    // 创建共享内存对象    int fd = shm_open("/my_shm", O_CREAT | O_RDWR, 0666);    ftruncate(fd, sizeof(struct shared_data));    // 映射共享内存struct shared_data *data = mmap(NULL, sizeof(struct shared_data),                                   PROT_READ | PROT_WRITE,                                   MAP_SHARED, fd, 0);    // 写入数据    data->counter = 0;    for (int i = 0; i < 10; i++) {        data->counter++;        snprintf(data->message, sizeof(data->message),                "Message #%d", data->counter);        printf("Writer: counter=%d, message=%s\n"               data->counter, data->message);        sleep(1);    }    // 清理    munmap(data, sizeof(struct shared_data));    close(fd);    shm_unlink("/my_shm");    return 0;}// reader.c#include <sys/mman.h>#include <fcntl.h>#include <unistd.h>#include <stdio.h>struct shared_data {    int counter;    char message[256];};int main() {    int fd = shm_open("/my_shm", O_RDONLY, 0666);struct shared_data *data = mmap(NULL, sizeof(struct shared_data),                                   PROT_READ,                                   MAP_SHARED, fd, 0);    for (int i = 0; i < 10; i++) {        printf("Reader: counter=%d, message=%s\n",               data->counter, data->message);        sleep(1);    }    munmap(data, sizeof(struct shared_data));    close(fd);    return 0;}

第六章: 调试与监控工具

6.1 进程内存映射查看

# 查看进程内存映射$ pmap -x <pid>Address           Kbytes     RSS   Dirty Mode  Mapping0000555555554000       4       4       0 r-x-- a.out0000555555755000       4       4       4 r---- a.out0000555555756000       4       4       4 rw--- a.out00007ffff7a3a000    1784     308       0 r-x-- libc-2.31.so00007ffff7bf2000    2048       0       0 ----- libc-2.31.so00007ffff7df2000      16      16      16 r---- libc-2.31.so00007ffff7df6000       8       8       8 rw--- libc-2.31.so# 详细统计信息$ cat /proc/<pid>/maps$ cat /proc/<pid>/smaps  # 更详细的统计信息# 按内存使用排序$ ps aux --sort=-rss

6.2 性能分析工具

# 使用perf分析缺页异常$ perf record -e page-faults -g ./my_program$ perf report# 使用trace-cmd跟踪mmap相关事件$ trace-cmd record -e syscalls -F ./my_program$ trace-cmd report | grep mmap# 使用valgrind检测内存问题$ valgrind --tool=memcheck ./my_program$ valgrind --tool=massif ./my_program  # 堆分析

6.3 内核调试技巧

// 添加调试打印(内核模块中)#include <linux/kernel.h>static void debug_vma(struct vm_area_struct *vma){    printk(KERN_DEBUG "VMA: %lx-%lx, flags: %lx, file: %p\n",           vma->vm_start, vma->vm_end, vma->vm_flags, vma->vm_file);    if (vma->vm_file) {        printk(KERN_DEBUG "  File: %s, inode: %lu\n",               vma->vm_file->f_path.dentry->d_name.name,               vma->vm_file->f_inode->i_ino);    }}// 使用ftrace动态追踪$ echo 1 > /sys/kernel/debug/tracing/events/kmem/mm_page_alloc/enable$ cat /sys/kernel/debug/tracing/trace_pipe

第七章: 内存映射优化策略

7.1 映射参数选择策略

场景
推荐参数
理由
只读大文件
PROT_READ, MAP_PRIVATE
节省内存, 可共享页缓存
读写大文件
PROT_READ|PROT_WRITE, MAP_SHARED
修改可同步到文件
进程间共享
MAP_SHARED, MAP_ANONYMOUS 或 shm_open
避免磁盘IO
临时大数据
PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS
纯内存操作
对齐要求
MAP_ALIGNED或手动对齐
避免TLB抖动

7.2 预读与预取优化

// 使用madvise提供访问模式提示madvise(addr, length, MADV_SEQUENTIAL);  // 顺序访问madvise(addr, length, MADV_RANDOM);      // 随机访问madvise(addr, length, MADV_WILLNEED);    // 即将访问madvise(addr, length, MADV_DONTNEED);    // 不再需要// 使用mlock锁定关键页面(避免交换)mlock(addr, length);      // 锁定到物理内存munlock(addr, length);    // 解除锁定mlockall(MCL_CURRENT);    // 锁定所有当前映射

7.3 NUMA架构优化

// 在特定NUMA节点分配内存#include <numaif.h>// 设置内存分配策略set_mempolicy(MPOL_BIND, &nodemask, sizeof(nodemask));// 或者使用mbind对已有映射设置策略mbind(addr, length, MPOL_BIND, &nodemask, sizeof(nodemask), 0);

第八章: 常见问题与解决方案

8.1 内存碎片化问题

检测碎片:

$ cat /proc/buddyinfo  # 查看伙伴系统空闲页$ cat /proc/pagetypeinfo  # 页面类型信息$ cat /proc/vmstat | grep frag  # 碎片统计

8.2 内存泄漏检测

// 使用内核的page owner追踪$ echo 1 > /sys/kernel/debug/page_owner$ cat /sys/kernel/debug/page_owner > page_owner.txt$ grep -A 10 "PFN" page_owner.txt | head -50// 用户空间检测工具$ valgrind --leak-check=full ./my_program$ mtrace ./my_program  # glibc内存跟踪

总结: Linux内存映射设计哲学

通过对Linux内存映射机制的深度剖析, 我们可以总结出以下核心设计思想:

9.1 分层抽象与统一管理

9.2 关键优化技术回顾

技术
解决的问题
实现机制
性能提升
缺页异常延迟分配
避免无用内存分配
首次访问时触发
启动快, 内存利用率高
写时复制
快速进程创建
共享页+写时复制
fork()速度提升10-100倍
页缓存
磁盘IO瓶颈
内存中缓存文件页
文件访问速度提升2-5倍
透明大页
TLB覆盖有限
自动合并小页
大数据处理提升15-30%
NUMA感知
跨节点访问延迟
就近分配策略
多插槽系统提升20-50%

9.3 给开发者的建议

  1. 1. 理解访问模式: 顺序访问使用MADV_SEQUENTIAL, 随机访问使用MADV_RANDOM
  2. 2. 合理选择映射类型: 只读文件用私有映射, 共享数据用共享映射
  3. 3. 注意对齐和大小: 按页大小对齐, 大块内存考虑大页
  4. 4. 及时同步和释放: 重要数据及时msync, 不用时munmap
  5. 5. 利用现代硬件特性: NUMA、持久内存、IOMMU等

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-08 22:34:00 HTTP/2.0 GET : https://f.mffb.com.cn/a/461947.html
  2. 运行时间 : 0.497692s [ 吞吐率:2.01req/s ] 内存消耗:4,545.16kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=1bdebf56e67bc5e4926269ca1ec1a0a7
  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.000767s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000683s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.114673s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.059973s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000726s ]
  6. SELECT * FROM `set` [ RunTime:0.000925s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000574s ]
  8. SELECT * FROM `article` WHERE `id` = 461947 LIMIT 1 [ RunTime:0.108593s ]
  9. UPDATE `article` SET `lasttime` = 1770561241 WHERE `id` = 461947 [ RunTime:0.036118s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000756s ]
  11. SELECT * FROM `article` WHERE `id` < 461947 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000689s ]
  12. SELECT * FROM `article` WHERE `id` > 461947 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.008922s ]
  13. SELECT * FROM `article` WHERE `id` < 461947 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.018368s ]
  14. SELECT * FROM `article` WHERE `id` < 461947 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.005758s ]
  15. SELECT * FROM `article` WHERE `id` < 461947 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.005816s ]
0.500239s