当前位置:首页>Linux>一文搞懂 Linux cgroup

一文搞懂 Linux cgroup

  • 2026-08-21 12:17:38
一文搞懂 Linux cgroup

大家好,这里是物联网心球。

本期文章,我们来深入学习 Linux cgroup。

1. cgroup 是什么?

cgroup(Control Groups)是 Linux 内核提供的一种机制,用于限制、记录和隔离进程组使用的物理资源(CPU、内存、磁盘 I/O 等)。它是容器技术(Docker、Kubernetes)实现资源隔离的底层基石。

cgroup 的核心设计目标是:让系统管理员能够对一组进程进行资源管控,而不需要修改应用程序代码。进程本身感知不到 cgroup 的存在,内核在资源分配时按照 cgroup 规则进行限制。如果 Namespace 解决的是"进程能看到什么"的问题,那么 cgroup 解决的就是"进程能用多少"的问题。

cgroup 的内核实现核心代码位于 kernel/cgroup/ 目录。cgroup 与进程之间通过struct css_set 建立关联,每个进程的 task_struct 中有一个指向 css_set 的指针,css_set 中又包含了指向各子系统 CSS 的指针数组 subsys。struct css_set 的简化定义如下

struct css_set {    struct cgroup_subsys_state *subsys[CGROUP_SUBSYS_COUNT]; /* 各子系统的 CSS */    struct list_head tasks;       /* 关联的进程链表 */    struct list_head mg_tasks;    /* 迁移中的进程链表 */    struct cgroup_root *dfl_cgrp; /* 默认 cgroup 根 */    struct list_head cgrp_links;  /* 关联的 cgroup 链表 */    struct cgroup_subsys_state *subsys[CGROUP_SUBSYS_COUNT]; /* 子系统 CSS 数组 */};

多个进程可以共享同一个 css_set,表示它们属于相同的 cgroup 组合。当进程加入新的 cgroup 时,内核会查找或创建匹配的 css_set,然后更新进程的 css_set 指针

每个 cgroup 与每个子系统之间都关联一个 CSS(struct cgroup_subsys_state)对象,它建立了 cgroup 和子系统之间的桥梁,其定义如下:

struct cgroup_subsys_state {    struct cgroup *cgroup;          /* 指向所属的 cgroup */    struct cgroup_subsys *ss;       /* 指向所属的子系统 */    struct list_head sibling;       /* 兄弟节点链表 */    struct list_head children;      /* 子节点链表 */    int id;                         /* CSS ID */    unsigned int serial_nr;         /* 序列号 */};

cgroup 本身的数据结构 struct cgroup 定义如下(简化版):

struct cgroup {    struct cgroup_root *root;       /* 指向 cgroup 根 */    struct cgroup_subsys_state self;/* 自身的 CSS */    struct cgroup_subsys_state __rcu *subsys[CGROUP_SUBSYS_COUNT]; /* 各子系统的 CSS */    struct cgroup_file files[CGROUP_FILE_COUNT]; /* 控制文件 */    struct kernfs_node *kn;        /* kernfs 节点 */};

cgroup 通过 self 的parentchildrensibling 构成了树形结构,通过 subsys 数组与各子系统关联。每个子系统通过 struct cgroup_subsys 描述,它定义了子系统的名称、ID、初始化函数、控制文件注册函数等:

struct cgroup_subsys {    const char *name;              /* 子系统名称 */    unsigned int id;               /* 子系统 ID */    struct cgroup_subsys_state *(*css_alloc)(struct cgroup_subsys_state *parent_css);    int (*css_online)(struct cgroup_subsys_state *css);    void (*css_offline)(struct cgroup_subsys_state *css);    void (*css_free)(struct cgroup_subsys_state *css);    struct cftype *dfl_cftypes;    /* v2 控制文件定义 */    struct cftype *legacy_cftypes; /* v1 控制文件定义 */    bool threaded;                 /* 是否支持线程模式 */};

cgroup 的核心能力包括:限制(Limit,限制资源上限)、优先级(Prioritize,按权重分配)、记录(Account,统计使用量)、控制(Control,挂起/恢复进程组)。

这些能力通过子系统实现,每个子系统负责一类资源。常用的子系统有 cpu(CPU 时间分配)、memory(内存使用量)、io(磁盘 I/O 带宽)、pids(进程数量)、cpuset(CPU 核心绑定)等。

cgroup 的初始化在内核启动阶段完成。start_kernel 函数调用 cgroup_init 函数,该函数注册 cgroup 文件系统类型并初始化各子系统。每个子系统通过 cgroup_subsys_init 宏在编译时注册到 cgroup_subsys[] 数组中,内核启动时依次调用各子系统的 css_alloc 和 css_online 回调函数完成初始化。当用户空间创建 cgroup 目录时,内核通过 cgroup_mkdir 函数处理,该函数分配新的 struct cgroup 结构,初始化各子系统的 CSS,然后在 kernfs 中创建对应的目录节点。

2. cgroup 文件系统

cgroup 通过虚拟文件系统 cgroupfs 暴露所有管理接口。cgroupfs 不是磁盘文件系统,而是一个基于 kernfs 的内存文件系统。cgroup v2 文件系统类型定义如下:

static struct file_system_type cgroup2_fs_type = {    .name            = "cgroup2",    .init_fs_context = cgroup_init_fs_context,    .parameters      = cgroup2_fs_parameters,    .kill_sb         = cgroup_kill_sb,    .fs_flags        = FS_USERNS_MOUNT,
};
cgroup 文件系统总览如图1所示。

图1    cgroup 文件系统总览

cgroup v2 挂载在 /sys/fs/cgroup 路径下。cgroupfs 的核心设计理念是:目录即 cgroup,文件即控制接口。创建 cgroup 只需 mkdir,删除只需 rmdir,配置限制只需 echo 写入控制文件,查看使用情况只需 cat 读取控制文件。

kernfs 是 cgroupfs 的底层实现。kernfs 是 Linux 内核中专门为内核子系统提供文件系统支持的框架,它简化了虚拟文件系统的创建过程。cgroup 中的每个目录和文件在 kernfs 中都对应一个 struct kernfs_node 节点。当用户程序访问 cgroup 文件时,kernfs 负责将 VFS(虚拟文件系统)的调用路由到 cgroup 子系统的回调函数。

cgroupfs 中的控制文件分为两类:通用文件(所有 cgroup 都有,以 cgroup. 为前缀)和子系统文件(取决于启用的控制器)。通用文件主要有:

  • cgroup.procs
    :cgroup 中的进程 PID 列表。
  • cgroup.controllers
    :该 cgroup 可用的控制器列表。
  • cgroup.subtree_control
    :控制子 cgroup 启用哪些控制器。
  • cgroup.events
    :通知事件。
  • cgroup.stat
    :cgroup 统计信息。

以 memory 子系统为例,其主要控制文件有:

  • memory.max
    :硬限制,超过后触发 OOM。
  • memory.high
    :软限制,超过后内核开始积极回收内存。
  • memory.low
    :软保护,保证最低可用内存。
  • memory.current
    :当前内存使用量(只读)。
  • memory.events
    :事件计数器(oom、oom_kill、high、max 等)。
  • memory.oom.group
    :是否将整个 cgroup 作为 OOM 单元。

cgroup 控制文件的内核实现基于 struct cftype(cgroup file type)。struct cftype 定义了控制文件的名称、权限、读写回调函数等,其简化定义如下:

struct cftype {    char name[MAX_CFTYPE_NAME];    /* 文件名 */    unsigned long flags;            /* 标志位 */    unsigned int max_write_len;     /* 最大写入长度 */    struct cgroup_subsys *ss;       /* 所属子系统 */    struct list_head node;          /* 链表节点 */    /* 读回调:用户程序执行 cat 时调用 */    int (*seq_show)(struct seq_file *sf, void *v);    /* 写回调:用户程序执行 echo 时调用 */    ssize_t (*write)(struct kernfs_open_file *of,                     char *buf, size_t nbytes, loff_t off);};

当用户程序执行 cat /sys/fs/cgroup/myapp/memory.current 时,内核通过 struct cftype 的 seq_show 回调函数读取内存使用数据。当执行 echo 536870912 > memory.max 时,内核通过 write 回调函数设置内存上限。以 memory.max 为例,其 write 回调最终调用 mem_cgroup_write 函数,该函数将写入值设置到 struct mem_cgroup 的 memory.max 成员中。struct mem_cgroup 是 memory 子系统的核心数据结构,它记录了该 cgroup 的所有内存使用状态和限制参数。后续每次内存分配时,内核都会检查该 cgroup 的累计内存是否超限。一旦超限,内核会触发 OOM Killer 或直接触发内存回收。

CPU 子系统则与 CFS(完全公平调度器)深度集成。cpu.max 的格式是"配额 周期",例如 100000 100000 表示每 100ms 的周期内最多使用 100ms 的 CPU 时间(即 1 核)。其内核实现通过 struct cfs_bandwidth 结构管理配额和周期。当配额耗尽时,调度器调用 throttle_cfs_rq 函数将该 cgroup 内进程的 CFS 运行队列挂起(throttle),直到下一个周期开始时调用 unthrottle_cfs_rq 恢复。这就是容器中 CPU 限流的根本原因。cpu.stat 文件中的 nr_throttled 字段记录了被限流的周期数,throttled_usec 字段记录了累计限流时间,这两个指标是排查 CPU 限流问题的关键依据。

来看一个完整的操作示例:

# 1. 创建 cgroupmkdir /sys/fs/cgroup/myapp# 2. 设置 CPU 限制:每 100ms 周期内最多 100ms(即 1 核)echo "100000 100000" > /sys/fs/cgroup/myapp/cpu.max# 3. 设置内存硬限制:512MBecho 536870912 > /sys/fs/cgroup/myapp/memory.max# 4. 设置内存软限制:400MBecho 419430400 > /sys/fs/cgroup/myapp/memory.high# 5. 限制最多 200 个进程echo 200 > /sys/fs/cgroup/myapp/pids.max# 6. 将进程(PID 12345)加入 cgroupecho 12345 > /sys/fs/cgroup/myapp/cgroup.procs# 7. 查看资源使用情况cat /sys/fs/cgroup/myapp/memory.currentcat /sys/fs/cgroup/myapp/memory.eventscat /sys/fs/cgroup/myapp/cpu.stat

3. cgroup 树形结构

cgroup 通过 struct cgroup 中的 parentchildrensibling 成员构成了树形层次结构。根节点是 /sys/fs/cgroup,代表整个系统的根 cgroup。子 cgroup 继承父 cgroup 的资源限制,子 cgroup 的资源使用量不能超过父 cgroup 的上限。cgroup 树形结构如下:

/sys/fs/cgroup/                    # 根 cgroup(系统全部资源)├── kubepods.slice/                # K8s 所有 Pod:12核 24GB│   ├── pod-aaa.slice/             # Pod A:2核 4GB│   │   ├── container1/            # 容器1:1核 2GB│   │   └── container2/            # 容器2:1核 2GB│   └── pod-bbb.slice/             # Pod B:4核 8GB│       └── container3/            # 容器3:4核 8GB├── system.slice/                  # 系统服务:2核 4GB└── kubelet.service/               # kubelet:2核 4GB

根 cgroup 拥有全部资源,kubepods.slice 从根分到 12 核 24GB,Pod A 从 kubepods 分到 2 核 4GB,容器1和容器2再从 Pod A 各分到 1 核 2GB。每一层的分配总和不超过父层级限额。

cgroup 树的核心特性是资源继承。内核在处理 cgroup 层级关系时,通过 cgroup_parent()等函数实现层级遍历和继承检查。当子 cgroup 设置资源限制时,内核会检查该限制是否超过父 cgroup 的上限。以 memory.max 为例,子 cgroup 的 memory.max 不能超过父 cgroup 的 memory.max。如果父 cgroup 的内存上限为 512MB,子 cgroup 最多也只能设置为 512MB,不能超过这个值。

在 cgroup v2 中,控制器需要在父层级通过 cgroup.subtree_control 显式启用,子 cgroup 才能使用对应的控制文件,操作示例如下:

# 在 myapp 下创建子 cgroupmkdir /sys/fs/cgroup/myapp/worker# 为子 cgroup 启用 cpu 和 memory 控制器echo "+cpu +memory" > /sys/fs/cgroup/myapp/cgroup.subtree_control# 子 cgroup 在父 cgroup 限额内进一步分配echo "50000 100000" > /sys/fs/cgroup/myapp/worker/cpu.max  # 0.5 核echo 268435456 > /sys/fs/cgroup/myapp/worker/memory.max    # 256MB# 将进程加入子 cgroupecho 12346 > /sys/fs/cgroup/myapp/worker/cgroup.procs

在 cgroup v2 统一层级下,一个进程在任意时刻只属于一个 cgroup。当把进程 PID 写入新 cgroup 的 cgroup.procs 时,内核通过 cgroup_attach_task 函数将进程从原 cgroup 迁移到新 cgroup。该函数首先查找或创建与新 cgroup 匹配的 css_set,然后更新进程 task_struct 中的 css_set 指针,使其指向新的 css_set。迁移完成后,进程的资源使用就会受到新 cgroup 的限制。

4. cgroup v1 和 v2

cgroup 经历了两个大版本:v1 和 v2。

4.1 cgroup v1

cgroup v1 采用"一个子系统一棵树"的架构。CPU、内存、I/O 等各自挂载在独立的层级树上,路径分别为 /sys/fs/cgroup/cpu//sys/fs/cgroup/memory//sys/fs/cgroup/blkio/ 等。v1 的文件系统类型定义如下:

static struct file_system_type cgroup_fs_type = {    .name            = "cgroup",    .init_fs_context = cgroup_init_fs_context,    .parameters      = cgroup1_fs_parameters,    .kill_sb         = cgroup_kill_sb,    .fs_flags        = FS_USERNS_MOUNT,};

v1 每棵树相互独立,一个进程在每棵树上可以独立归属到不同的 cgroup。这种设计看似灵活但却存在很多问题:

  • 层级不一致
    :不同子系统的 cgroup 树可以完全不同,难以统一管理。
  • 接口割裂
    :控制文件命名不统一,如 cpu.cfs_quota_usmemory.limit_in_bytesblkio.throttle.read_bps_device,缺乏一致性。
  • 进程归属混乱
    :一个进程在每棵树上归属不同 cgroup,资源限制的关联关系非常复杂。
  • 迁移开销大
    :进程在 cgroup 之间移动时需要更新多个 css_set,开销大。

4.2 cgroup v2

cgroup v2 的核心变化统一层级:所有子系统共享同一棵 cgroup 树,进程只归属于唯一一个 cgroup。

v2 在内核中引入了 struct cgroup_root 来管理统一的 cgroup 层级树:

struct cgroup_root {    struct kernfs_root *kf_root;    /* kernfs 根 */    unsigned int subsys_mask;       /* 启用的子系统掩码 */    int hierarchy_id;               /* 层级 ID */    struct cgroup cgrp;             /* 根 cgroup */    int nr_cgrps;                   /* cgroup 总数 */    struct list_head root_list;     /* 全局根链表 */    unsigned int flags;             /* 标志位 */    struct cgroupfs_opts opts;      /* 挂载选项 */};

struct cgroup_root 管理整个 cgroup 层级树的生命周期。subsys_mask 是一个位掩码,记录了该层级树启用了哪些子系统。cgrp 是根 cgroup,所有其他 cgroup 都是它的后代。整个系统中可以存在多个 cgroup_root,通过 root_list 链表串联,但在 v2 统一层级模式下通常只有一个。

v2 在接口设计上也更加规范:通用控制文件以 cgroup. 为前缀,子系统参数统一为 控制器.参数 格式(如 cpu.maxmemory.maxio.max)。这种统一的命名规范大大降低了运维成本。此外,v2 还引入了多项改进:

  • 支持线程级粒度控制(cgroup.threads 文件,配合 cgroup.type=threaded)。
  • 内置 cgroup.stat 和 cgroup.events 监控文件,无需额外工具。
  • 通过 BPF 实现设备控制(替代 v1 的 devices 子系统),更加灵活。
  • 原生支持 memory.high 软限制,实现优雅降级——内存使用超过 memory.high 后内核开始积极回收,避免直接触发 OOM。
  • 支持 memory.oom.group,将整个 cgroup 作为 OOM 单元,适用于容器场景。

4.3 v1 与 v2 对比

对比维度
cgroup v1
cgroup v2
层级结构
每个子系统独立树
统一层级树
进程归属
每棵树独立归属
全局唯一归属
控制文件命名
各子系统风格不统一
统一命名规范
挂载路径
/sys/fs/cgroup/{cpu,memory,...}/sys/fs/cgroup
(单一挂载点)
内存软限制
无直接等价物
memory.high
文件系统类型名
cgroupcgroup2
内核数据结构
cgroup_subsys_state
 独立管理
cgroup_root
 统一管理

最后:

本期文章到此结束,如果对您有帮助,欢迎关注物联网心球。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-21 20:57:13 HTTP/2.0 GET : https://f.mffb.com.cn/a/507866.html
  2. 运行时间 : 0.293971s [ 吞吐率:3.40req/s ] 内存消耗:4,592.08kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=a251d253d1c465c7802d4449d6187d6f
  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.001000s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001326s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.012751s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.041133s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001771s ]
  6. SELECT * FROM `set` [ RunTime:0.004185s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001595s ]
  8. SELECT * FROM `article` WHERE `id` = 507866 LIMIT 1 [ RunTime:0.001385s ]
  9. UPDATE `article` SET `lasttime` = 1787317033 WHERE `id` = 507866 [ RunTime:0.028366s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000822s ]
  11. SELECT * FROM `article` WHERE `id` < 507866 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001408s ]
  12. SELECT * FROM `article` WHERE `id` > 507866 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001853s ]
  13. SELECT * FROM `article` WHERE `id` < 507866 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001910s ]
  14. SELECT * FROM `article` WHERE `id` < 507866 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.002767s ]
  15. SELECT * FROM `article` WHERE `id` < 507866 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.022522s ]
0.297800s