当前位置:首页>Linux>打破Linux性能瓶颈:cgroups/taskset 进程负载控制

打破Linux性能瓶颈:cgroups/taskset 进程负载控制

  • 2026-01-14 10:55:16
打破Linux性能瓶颈:cgroups/taskset 进程负载控制

在Linux系统运维与性能优化场景中,进程负载不均往往是制约系统效能的核心瓶颈——核心资源分配失衡、关键进程抢占资源不足、后台进程过度占用算力等问题,不仅会导致业务响应延迟,更可能引发系统稳定性风险。如何实现进程负载的精细化管控,成为突破性能瓶颈的关键。

cgroups与taskset作为Linux内核自带的核心工具,为进程负载控制提供了底层支撑:cgroups可实现资源的精准配额与隔离,taskset能定向绑定进程至指定CPU核心,二者协同可构建高效的负载管控体系。本文将以“打破性能瓶颈”为核心目标,从工具核心原理入手,拆解cgroups与taskset的协同工作机制,逐步讲解进程负载监测、资源配额配置、CPU核心绑定等实操流程,助力运维人员快速掌握精细化负载控制方法,让系统资源分配更合理、业务运行更高效。

一、cgroups:资源管理的核心支柱

1.1 cgroups 的起源与概念

cgroups,全称 Control Groups,是 Linux 内核提供的一种可以限制、记录、隔离进程组所使用物理资源的强大机制 。它最初由 Google 的工程师在 2006 年发起,当时被称为 “进程容器”(Process Container) ,旨在为 Linux 系统提供一种更加精细的资源控制方式。在 2007 年,这个项目被重命名为 cgroups,并于 2008 年成功合并到 Linux 2.6.24 版内核后正式对外发布,从此成为了 Linux 系统中资源管理的重要组成部分。

在 cgroups 的世界里,有几个核心概念需要我们了解。首先是 “任务(task)”,它其实就是系统中的一个进程。这些任务可以被划分到不同的 “控制族群(control group)” 中,控制族群是一组按照某种标准划分的进程,cgroups 中的资源控制都是以控制族群为单位实现的。一个进程可以加入到某个控制族群,也可以从一个控制族群迁移到另一个控制族群,就像员工可以被分配到不同的项目组一样 。

“层级(hierarchy)” 则为这些控制族群构建了一种树状的组织形式。在这个层级结构中,子控制组会自动继承父控制组的特定属性,这使得资源管理更加灵活和高效。比如,公司的部门可以分为不同的层级,基层部门会继承上层部门的一些规章制度和资源分配原则 。

还有 “子系统(subsystem)”,它是 cgroups 实现资源控制的关键组件,一个子系统就是一个资源控制器,比如 cpu 子系统用于控制 cpu 时间分配,memory 子系统用于设定内存使用限制 。每个子系统都专注于管理一种特定的资源,它们相互协作,共同为进程组提供全面的资源管理服务。

1.2 cgroups 子系统

cgroups 包含了多个子系统,每个子系统都负责控制特定类型的资源,下面我们来深入了解一下这些子系统的功能 。

  1. blkio 子系统:主要用于为块设备设定输入 / 输出限制,这里的块设备包括我们常见的磁盘、固态硬盘、USB 设备等。通过 blkio 子系统,我们可以限制进程组对这些设备的读写速率、读写次数等,确保磁盘 I/O 资源的合理分配。例如,在一个同时运行数据库服务和文件存储服务的服务器上,我们可以通过 blkio 子系统为数据库服务分配更多的磁盘 I/O 带宽,以保证数据库的读写性能,避免文件存储服务的大量 I/O 操作影响数据库的正常运行 。
  2. cpu 子系统:使用调度程序提供对 CPU 的 cgroup 任务访问,它可以限制进程组使用 CPU 的时间片,从而控制进程组对 CPU 资源的占用。比如,我们可以通过设置 cpu.shares 参数来为不同的进程组分配 CPU 份额,份额数值越大,该进程组在 CPU 资源竞争时获得的时间片就越多,优先级也就越高。在一个多用户的服务器环境中,为重要用户的进程组分配较高的 CPU 份额,可以保证他们的任务能够优先得到处理,提高服务质量 。
  3. memory 子系统:可以设定 cgroup 中任务使用的内存限制,并自动生成由那些任务使用的内存资源报告。当进程组使用的内存达到设定的限额再申请内存时,就会触发 OOM(Out Of Memory)机制,防止某个进程组耗尽系统内存,影响其他进程的正常运行。在运行多个 Java 应用程序的服务器上,为每个 Java 应用程序的进程组设置合理的内存限制,可以避免因某个应用程序内存泄漏而导致整个服务器内存耗尽 。
  4. cpuacct 子系统:这个子系统会自动生成 cgroup 中任务所使用的 CPU 报告,详细记录每个进程组使用 CPU 的时间、用户态时间、内核态时间等信息。通过这些报告,我们可以清晰地了解各个进程组对 CPU 资源的使用情况,为性能优化和资源分配提供有力的数据支持。例如,通过分析 cpuacct 子系统生成的报告,我们可以发现某个进程组的 CPU 使用率过高,进而对其进行优化或者调整资源分配 。
  5. cpuset 子系统:能够为 cgroup 中的任务分配独立的 CPU(在多核系统中)和内存节点,这对于一些对 CPU 亲和性要求较高的应用程序非常重要。比如,在运行高性能计算任务时,我们可以使用 cpuset 子系统将任务固定到特定的 CPU 核心上,减少 CPU 上下文切换带来的开销,提高计算效率 。
  6. devices 子系统:可允许或者拒绝 cgroup 中的任务访问设备,这在保障系统安全和资源隔离方面起着重要作用。例如,在容器环境中,我们可以使用 devices 子系统限制容器内的进程访问宿主机的某些敏感设备,防止容器内的恶意程序对宿主机造成损害 。
  7. freezer 子系统:主要用于挂起或者恢复 cgroup 中的任务,这在一些特殊场景下非常有用。比如,当我们需要对某个进程组进行资源调整或者系统维护时,可以使用 freezer 子系统将该进程组挂起,避免在操作过程中进程组对系统资源产生影响,操作完成后再将其恢复运行 。
  8. net_cls 子系统:使用等级识别符(classid)标记网络数据包,可允许 Linux 流量控制程序(tc)识别从具体 cgroup 中生成的数据包,从而实现对网络流量的精细化控制。例如,在一个同时运行多个网络应用程序的服务器上,我们可以通过 net_cls 子系统为不同应用程序的网络数据包标记不同的 classid,然后使用 tc 程序根据这些标记对网络流量进行限速、优先级调度等操作 。

1.3 cgroups 的使用方法

下面我们以 Ubuntu 系统为例,来实际操作一下 cgroups,看看如何利用它来进行资源限制和管理 。

(1)检查系统是否支持 cgroups:首先,我们需要确认系统是否支持 cgroups。可以通过查看 /proc/cgroups 文件来判断,如果文件存在且内容不为空,说明系统支持 cgroups。你可以使用以下命令查看:

cat /proc/cgroups

(2)挂载 cgroups 文件系统:cgroups 通过一种特殊的虚拟文件系统来实现对资源的管理,因此我们需要先挂载 cgroups 文件系统。在 Ubuntu 系统中,通常已经默认挂载了一些 cgroups 子系统,我们可以通过 mount 命令查看:

mount -t cgroup

如果需要挂载特定的子系统,比如 cpu 子系统,可以使用以下命令:

sudo mount -t cgroup -o cpu cpu /sys/fs/cgroup/cpu

这将把 cpu 子系统挂载到 /sys/fs/cgroup/cpu 目录下。

(3)创建控制组:在挂载好 cgroups 文件系统后,我们就可以创建控制组了。以创建一个名为 my_group 的 CPU 控制组为例,在 /sys/fs/cgroup/cpu 目录下创建一个新的目录:

sudo mkdir /sys/fs/cgroup/cpu/my_group

(4)设置资源限制:进入刚刚创建的控制组目录,我们可以看到一些文件,这些文件用于设置资源限制和获取资源使用信息。比如,要设置 CPU 使用限制,可以通过修改 cpu.cfs_period_us 和 cpu.cfs_quota_us 文件来实现。假设我们要限制 my_group 控制组在每 100ms(100000 微秒)的时间窗口内最多只能使用 50ms(50000 微秒)的 CPU 时间,可以使用以下命令:

sudo echo 100000 > /sys/fs/cgroup/cpu/my_group/cpu.cfs_period_ussudo echo 50000 > /sys/fs/cgroup/cpu/my_group/cpu.cfs_quota_us

如果要设置 CPU 份额(相对权重),可以修改 cpu.shares 文件。例如,将 my_group 控制组的 CPU 份额设置为 512:

sudo echo 512 > /sys/fs/cgroup/cpu/my_group/cpu.shares

(5)将进程添加到控制组:最后,我们需要将目标进程添加到创建好的控制组中。假设我们要将进程 ID 为 12345 的进程添加到 my_group 控制组,可以使用以下命令:

sudo echo 12345 > /sys/fs/cgroup/cpu/my_group/tasks

这样,进程 12345 就被添加到了 my_group 控制组中,它的 CPU 使用将受到我们之前设置的限制 。

通过以上步骤,我们就完成了使用 cgroups 对进程进行 CPU 资源限制的基本操作。对于其他子系统,如 memory、blkio 等,操作方法类似,只是对应的文件和参数不同 。在实际应用中,我们可以根据具体的业务需求,灵活运用 cgroups 的各个子系统,实现对系统资源的高效管理和优化 。

二、taskset:进程绑定的高效工具

2.1 taskset 功能剖析

在多核处理器日益普及的今天,如何充分发挥多核 CPU 的性能优势,成为了提升系统整体性能的关键。taskset 这个工具,就像是一把神奇的魔杖,能够精准地将进程绑定到特定的 CPU 核心上,为我们解决这一难题提供了有力的支持 。

taskset 的核心功能是设置进程(或线程)的处理器亲和性(Processor Affinity) ,也就是决定一个进程在哪些 CPU 核心上运行。默认情况下,操作系统的调度器会根据自己的算法,动态地将进程分配到各个 CPU 核心上执行,这虽然保证了资源的充分利用,但在某些特定场景下,也会带来一些问题。例如,当一个进程频繁地在不同 CPU 核心之间切换时,会导致 CPU 缓存命中率降低,因为每个 CPU 核心都有自己独立的缓存,进程在不同核心间切换意味着之前在某个核心缓存中的数据可能无法被新核心直接访问,需要重新加载,这就增加了数据访问的时间开销 。同时,上下文切换也会消耗一定的 CPU 时间,降低了进程的执行效率 。

而 taskset 的出现,很好地解决了这些问题。通过使用 taskset 命令,我们可以明确指定某个进程只能在特定的一个或多个 CPU 核心上运行,避免了进程在多个核心之间不必要的切换,从而减少了上下文切换的开销,提高了 CPU 缓存的命中率 。这对于那些对计算资源要求较高、需要持续稳定运行的应用程序来说,无疑是一个巨大的性能提升。比如,在大数据分析领域,MapReduce 任务在执行时,需要对海量的数据进行处理,如果能够将相关进程绑定到特定的 CPU 核心上,就可以大大提高任务的执行速度,缩短数据分析的时间 。

2.2 taskset 应用场景与使用案例、

taskset的应用场景非常广泛,在很多对性能要求苛刻的场景中都能发挥重要作用 。

(1)数据库服务:数据库服务通常对 I/O 和 CPU 性能要求极高,为了保证数据库的稳定运行和高效响应,我们可以使用 taskset 将数据库进程绑定到特定的 CPU 核心上。以 MySQL 数据库为例,假设我们的服务器有 8 个 CPU 核心,为了避免 MySQL 进程在多个核心之间频繁切换,影响性能,我们可以先通过以下命令查找 MySQL 的进程 ID(PID):

pgrep -f mysql

假设查找到的 PID 为 12345,然后使用 taskset 命令将其绑定到 CPU 核心 0 和 1 上:

sudo taskset -p -c 0,1 12345

这样,MySQL 进程就会固定在 CPU 核心 0 和 1 上运行,减少了上下文切换带来的开销,提高了数据库的性能和响应速度 。

(2)科学计算任务:在进行科学计算时,比如分子动力学模拟、天气预报模型计算等,这些任务通常需要大量的计算资源,而且计算过程往往是连续的,对 CPU 的稳定性要求很高。使用 taskset 将科学计算任务绑定到特定的 CPU 核心上,可以让任务在一个稳定的计算环境中运行,避免其他进程的干扰,提高计算效率。例如,在运行一个分子动力学模拟程序时,我们可以将其绑定到特定的几个高性能 CPU 核心上:

taskset -c 4-7 /path/to/molecular_dynamics_program

这条命令会让分子动力学模拟程序在 CPU 核心 4 到 7 上运行,充分利用这些核心的计算能力,加快模拟速度 。

(3)实时应用程序:对于一些实时应用程序,如音频和视频处理、工业自动化控制等,对响应时间要求非常严格,哪怕是微小的延迟都可能导致严重的后果。通过 taskset 将这些实时应用程序的进程绑定到特定的 CPU 核心上,可以确保它们在需要时能够及时获得 CPU 资源,保证实时性。比如,在一个视频编码应用中,我们可以将编码进程绑定到特定的 CPU 核心:

taskset -p -c 2 /usr/bin/video_encoding_program

这样,视频编码进程就会在 CPU 核心 2 上运行,减少了其他进程对 CPU 资源的争抢,保证视频编码的流畅性和实时性 。

从实际案例来看,taskset 的效果非常显著。在一个电商平台的后端服务器上,同时运行着 Web 服务器(如 Nginx)和数据库服务器(如 MySQL)。随着业务量的增长,服务器的负载越来越高,用户反馈页面加载速度变慢,订单处理时间变长 。经过分析发现,MySQL 和 Nginx 进程在多个 CPU 核心之间频繁切换,导致 CPU 缓存命中率降低,性能下降 。

于是,运维人员使用 taskset 对这两个进程进行了绑定,将 MySQL 进程绑定到 CPU 核心 0 和 1,将 Nginx 进程绑定到 CPU 核心 2 和 3 。绑定之后,服务器的性能得到了明显提升,页面加载速度大幅加快,订单处理时间也缩短了很多,用户体验得到了极大的改善 。

在另一个科学计算集群中,研究人员运行着一个复杂的气候模拟程序,该程序需要长时间占用大量的 CPU 资源 。在没有使用 taskset 之前,由于计算任务在多个 CPU 核心之间频繁切换,导致计算效率低下,一次完整的模拟需要耗费数天时间 。后来,研究人员使用 taskset 将气候模拟程序绑定到特定的一组高性能 CPU 核心上,结果计算时间缩短了近一半,大大提高了研究效率 。

三、cgroups 与 taskset 的协同使用

3.1协同原理深度解读

cgroups 和 taskset 虽然是两个不同的工具,但它们在打破性能瓶颈方面却有着奇妙的协同效应,就像一对默契十足的搭档,各自发挥专长,共同为提升系统性能而努力 。

cgroups 侧重于对资源的全面管理和限制,它就像是一个智能的资源管家,能够细致地划分系统资源,为不同的进程组分配合理的资源配额,避免资源的过度竞争和浪费 。以 CPU 资源为例,通过 cgroups 的 cpu 子系统,我们可以精确地控制每个进程组在 CPU 时间片上的分配比例,确保重要的进程组能够获得足够的 CPU 资源来高效运行,而不会被其他无关紧要的进程组抢占资源 。在内存管理方面,memory 子系统可以设定进程组的内存使用上限,防止某个进程组因内存泄漏或过度占用内存而导致系统内存不足,影响其他进程的正常运行 。此外,cgroups 还能对磁盘 I/O、网络等资源进行有效的管控,为进程组创造一个稳定、有序的资源环境 。

taskset 则专注于进程与 CPU 核心的绑定,它就像是一个精准的导航仪,能够引导进程找到最适合自己运行的 CPU 核心 。在多核 CPU 系统中,每个 CPU 核心都有自己独立的缓存和执行单元 。taskset 通过设置进程的处理器亲和性,将进程固定在特定的一个或多个 CPU 核心上运行,这样可以减少进程在不同 CPU 核心之间的频繁切换,避免因上下文切换带来的额外开销,同时还能提高 CPU 缓存的命中率 。因为进程在固定的 CPU 核心上运行时,其访问的数据和指令可以持续地被缓存在该核心的缓存中,当再次访问时,能够快速从缓存中获取,大大缩短了数据访问的时间,提高了进程的执行效率 。

当 cgroups 和 taskset 协同工作时,它们的优势得到了充分的发挥 。cgroups 为进程组提供了合理的资源分配和限制,确保每个进程组都能在公平的资源环境下运行 。而 taskset 则进一步优化了进程在 CPU 核心上的运行效率,使得进程能够更加充分地利用 CPU 资源 。例如,在一个同时运行多个服务的服务器上,我们可以使用 cgroups 将不同的服务划分到不同的资源组中,为每个资源组分配相应的 CPU、内存等资源 。然后,再使用 taskset 将每个服务的进程绑定到特定的 CPU 核心上,这样既保证了各个服务之间的资源隔离,又提高了每个服务的运行效率,从而有效地打破了服务器的性能瓶颈 。

3.2实际操作步骤详解

为了让大家更清楚地了解 cgroups 和 taskset 的协同使用方法,下面我们以一个运行多进程服务的服务器为例,详细介绍具体的操作步骤 。假设我们的服务器上运行着一个 Web 服务(如 Nginx)和一个数据库服务(如 MySQL),为了提高这两个服务的性能,我们决定使用 cgroups 和 taskset 对它们进行优化 。

(1)使用 cgroups 划分资源组

挂载 cgroups 文件系统首先,确保 cgroups 文件系统已经挂载。在大多数 Linux 系统中,cgroups 文件系统会在系统启动时自动挂载到 /sys/fs/cgroup 目录下。如果没有自动挂载,可以使用以下命令手动挂载:

sudo mount -t cgroup -o cpu,cpuacct,memory /sys/fs/cgroup/cpu,cpuacct,memory /sys/fs/cgroup

这条命令将同时挂载 cpu、cpuacct 和 memory 子系统到 /sys/fs/cgroup 目录下 。

创建控制组在 /sys/fs/cgroup 目录下,分别为 Web 服务和数据库服务创建控制组。例如,创建一个名为 nginx_group 的控制组用于 Web 服务,一个名为 mysql_group 的控制组用于数据库服务:

sudo mkdir /sys/fs/cgroup/cpu,cpuacct,memory/nginx_groupsudo mkdir /sys/fs/cgroup/cpu,cpuacct,memory/mysql_group

设置资源限制进入 nginx_group 控制组目录,设置 Web 服务的资源限制。比如,限制 Web 服务在每 100ms(100000 微秒)的时间窗口内最多只能使用 30ms(30000 微秒)的 CPU 时间,同时设置内存使用上限为 512MB(536870912 字节):

sudo echo 100000 > /sys/fs/cgroup/cpu,cpuacct,memory/nginx_group/cpu.cfs_period_ussudo echo 30000 > /sys/fs/cgroup/cpu,cpuacct,memory/nginx_group/cpu.cfs_quota_ussudo echo 536870912 > /sys/fs/cgroup/cpu,cpuacct,memory/nginx_group/memory.limit_in_bytes

同样,进入 mysql_group 控制组目录,为数据库服务设置资源限制。假设数据库服务在每 100ms 的时间窗口内最多可使用 60ms 的 CPU 时间,内存使用上限为 1GB(1073741824 字节):

sudo echo 100000 > /sys/fs/cgroup/cpu,cpuacct,memory/mysql_group/cpu.cfs_period_ussudo echo 60000 > /sys/fs/cgroup/cpu,cpuacct,memory/mysql_group/cpu.cfs_quota_ussudo echo 1073741824 > /sys/fs/cgroup/cpu,cpuacct,memory/mysql_group/memory.limit_in_bytes

(2)使用 taskset 将进程绑定到对应 CPU 核心

查找进程 ID通过 pgrep 命令查找 Web 服务和数据库服务的进程 ID。例如,查找 Nginx 的进程 ID:

pgrep -f nginx

假设查找到的 Nginx 进程 ID 为 12345,查找 MySQL 的进程 ID:

pgrep -f mysql

假设查找到的 MySQL 进程 ID 为 67890 。

绑定进程到 CPU 核心使用 taskset 命令将 Nginx 进程绑定到 CPU 核心 2 和 3 上,将 MySQL 进程绑定到 CPU 核心 4 和 5 上:

sudo taskset -p -c 2,3 12345sudo taskset -p -c 4,5 67890

通过以上步骤,我们就完成了使用 cgroups 和 taskset 对 Web 服务和数据库服务的协同优化 。在实际应用中,你可以根据服务器的硬件配置和业务需求,灵活调整资源限制和 CPU 核心绑定的设置,以达到最佳的性能优化效果 。

四、实战案例:见证性能飞跃

4.1案例背景介绍

在电商行业蓬勃发展的当下,业务增长如同汹涌的浪潮,对服务器性能提出了前所未有的挑战。本次案例的主角是一家颇具规模的电商平台,随着用户数量的不断攀升和业务量的持续增长,服务器的负载压力与日俱增 。在促销活动期间,大量用户同时涌入平台进行购物,下单、支付、查询商品信息等操作并发进行,使得服务器的性能急剧下降。

原本流畅的购物体验变得卡顿不堪,用户频繁反馈页面加载缓慢,点击商品详情后需要等待数秒甚至数十秒才能显示内容,提交订单时也常常出现长时间的等待和系统繁忙的提示 。这不仅严重影响了用户的购物体验,导致用户流失,还对电商平台的销售额和声誉造成了巨大的冲击 。面对如此严峻的性能瓶颈问题,电商平台的技术团队迫切需要找到有效的解决方案,以提升服务器的性能,保障业务的稳定运行 。

4.2优化前性能指标展示

在对服务器进行优化之前,我们先来看看当时的性能指标情况 。通过专业的监控工具,我们收集到了以下数据:服务器的 CPU 使用率长期维持在 80% 以上,在购物高峰期甚至飙升至 95% 以上,几乎达到了满载状态 。这意味着 CPU 资源被极度消耗,无法及时处理新的任务请求 。内存使用率也居高不下,稳定在 75% 左右,大量的内存被占用,导致系统在进行数据交换时频繁出现卡顿现象 。

从响应时间来看,用户请求的平均响应时间达到了 500 毫秒以上,在高并发情况下,响应时间更是延长至 1 秒甚至更久 。这对于追求即时性的电商购物体验来说,是难以接受的 。例如,用户在点击商品链接后,需要等待至少半秒才能看到商品详情页面,这很容易让用户失去耐心,转而选择其他电商平台 。

在吞吐量方面,服务器每秒能够处理的请求数量(QPS)在正常情况下仅为 500 左右,而在促销活动等高并发场景下,QPS 更是降至 300 以下 。这远远无法满足业务增长的需求,导致大量的请求堆积,进一步加剧了系统的延迟和卡顿 。

这些性能指标数据直观地反映了服务器在优化前面临的困境,也凸显了解决性能瓶颈问题的紧迫性 。

4.3 cgroups 与 taskset 优化过程

面对服务器性能瓶颈,技术团队决定采用 cgroups 和 taskset 协同工作的方式进行优化 。 首先,使用 cgroups 对不同业务进程进行资源限制和隔离 。根据电商平台的业务特点,将订单处理、商品展示、用户认证等核心业务分别划分到不同的控制组中 。以订单处理业务为例,在 /sys/fs/cgroup/cpu 目录下创建一个名为 order_group 的控制组:

sudo mkdir /sys/fs/cgroup/cpu/order_group

然后,设置该控制组的 CPU 资源限制 。考虑到订单处理业务的重要性和实时性,为其分配相对较多的 CPU 资源,设置在每 100ms(100000 微秒)的时间窗口内最多可使用 70ms(70000 微秒)的 CPU 时间:

sudo echo 100000 > /sys/fs/cgroup/cpu/order_group/cpu.cfs_period_ussudo echo 70000 > /sys/fs/cgroup/cpu/order_group/cpu.cfs_quota_us

同时,为了防止订单处理进程占用过多内存,在 memory 子系统中创建相应的控制组,并设置内存使用上限为 1GB(1073741824 字节):

sudo mkdir /sys/fs/cgroup/memory/order_groupsudo echo 1073741824 > /sys/fs/cgroup/memory/order_group/memory.limit_in_bytes

对于商品展示业务,同样创建名为 product_group 的控制组,并根据其业务需求,合理分配 CPU 和内存资源 。在每 100ms 的时间窗口内,商品展示控制组最多可使用 20ms 的 CPU 时间,内存使用上限设置为 512MB(536870912 字节):

sudo mkdir /sys/fs/cgroup/cpu/product_groupsudo echo 100000 > /sys/fs/cgroup/cpu/product_group/cpu.cfs_period_ussudo echo 20000 > /sys/fs/cgroup/cpu/product_group/cpu.cfs_quota_ussudo mkdir /sys/fs/cgroup/memory/product_groupsudo echo 536870912 > /sys/fs/cgroup/memory/product_group/memory.limit_in_bytes

完成 cgroups 的资源限制设置后,接下来使用 taskset 将各个业务进程绑定到特定的 CPU 核心上 。通过 pgrep 命令查找订单处理进程的 ID(假设为 12345),然后将其绑定到 CPU 核心 0、1 和 2 上:

pgrep -f order_processingsudo taskset -p -c 0,1,2 12345

同样,查找商品展示进程的 ID(假设为 67890),并将其绑定到 CPU 核心 3、4 和 5 上:

pgrep -f product_displaysudo taskset -p -c 3,4,5 67890

通过这样的方式,实现了不同业务进程在CPU核心上的合理分配,减少了进程之间的资源竞争和上下文切换开销 。

五、避坑指南:使用中的常见问题

在使用 cgroups 和 taskset 的过程中,虽然它们能为我们带来显著的性能提升,但也可能会遇到一些问题。了解这些常见问题及解决方法,能帮助我们更加顺利地运用这两个工具,充分发挥它们的优势 。

5.1资源配置不合理问题

在设置 cgroups 资源限制时,如果限制过小,可能会导致进程无法获得足够的资源,从而出现运行缓慢甚至异常终止的情况 。例如,将某个数据库进程的 CPU 时间限制设置得过小,数据库在处理大量查询请求时,就会因为 CPU 资源不足而响应迟缓,影响整个业务系统的运行 。相反,如果设置 taskset 时绑定的 CPU 核心过多,而进程本身并不能充分利用这些核心,就会造成资源浪费,降低系统整体的资源利用率 。

为了解决资源配置不合理的问题,我们需要对业务进行深入的分析和测试 。在设置 cgroups 资源限制之前,先通过性能测试工具,如 Apache JMeter、LoadRunner 等,对不同业务场景下进程的资源使用情况进行监测和分析,了解其资源需求的峰值和平均值 。根据这些数据,合理地设置资源限制,既要保证进程有足够的资源来高效运行,又要避免资源的过度分配 。对于 taskset 绑定 CPU 核心的设置,同样需要根据进程的特性和负载情况来进行优化 。可以通过多次测试,观察不同 CPU 核心绑定方案下进程的运行性能,选择最适合的配置 。

5.2兼容性问题

不同的 Linux 发行版以及内核版本对cgroups和 taskset 的支持存在一定的差异 。一些旧版本的Linux内核可能不支持cgroups的某些高级特性,或者在功能实现上存在一些缺陷 。例如,在某些较老的内核版本中,cgroups的内存子系统在处理大内存分配时可能会出现不稳定的情况 。不同发行版在cgroups和taskset的配置方式、命令参数等方面也可能有所不同,这给跨平台使用带来了一定的困难 。

为了确保兼容性,在选择 Linux 发行版和内核版本时,要优先考虑对 cgroups 和 taskset 支持较好的版本 。可以查阅官方文档、社区论坛等,了解不同版本对这两个工具的支持情况 。在实际应用中,如果遇到兼容性问题,可以尝试升级内核版本,或者参考相关的技术文档和社区讨论,寻找对应的解决方案 。例如,对于某些旧内核版本中 cgroups 内存子系统的问题,可以通过升级内核到支持该功能的版本来解决;对于不同发行版配置方式的差异,可以根据具体发行版的文档进行相应的调整 。

5.3进程管理问题

在使用 cgroups 和 taskset 的过程中,还可能会遇到一些进程管理方面的问题 。比如,在某些情况下,进程可能会脱离 cgroups 的控制组,导致资源限制失效 。这可能是由于进程在运行过程中发生了一些异常情况,或者是因为程序本身的设计缺陷,导致进程重新启动或迁移到了其他控制组 。另外,使用 taskset 时,也可能会出现进程无法成功绑定到指定 CPU 核心的情况,这可能是由于权限不足、CPU 核心被其他进程占用等原因造成的 。

针对进程脱离控制组的问题,我们可以通过定期检查进程的控制组归属,以及设置监控脚本,实时监测进程是否在指定的控制组内运行 。一旦发现进程脱离控制组,及时分析原因并采取相应的措施,如重新将进程添加到控制组,或者检查程序代码,修复可能导致进程异常的问题 。对于进程无法绑定到指定 CPU 核心的问题,首先要确保具有足够的权限,可以使用 sudo 命令来提升权限 。如果是 CPU 核心被占用的原因,可以通过查看系统资源使用情况,找出占用核心的进程,并进行相应的处理,如暂停或迁移该进程,然后再尝试绑定 。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-09 01:50:06 HTTP/2.0 GET : https://f.mffb.com.cn/a/461694.html
  2. 运行时间 : 0.175817s [ 吞吐率:5.69req/s ] 内存消耗:4,804.20kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=1b95ac4d3e955d69a2999c33b5568330
  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.000530s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000648s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.006314s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000299s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000570s ]
  6. SELECT * FROM `set` [ RunTime:0.001544s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000608s ]
  8. SELECT * FROM `article` WHERE `id` = 461694 LIMIT 1 [ RunTime:0.008758s ]
  9. UPDATE `article` SET `lasttime` = 1770573006 WHERE `id` = 461694 [ RunTime:0.011600s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.010013s ]
  11. SELECT * FROM `article` WHERE `id` < 461694 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.004562s ]
  12. SELECT * FROM `article` WHERE `id` > 461694 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.009825s ]
  13. SELECT * FROM `article` WHERE `id` < 461694 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.023176s ]
  14. SELECT * FROM `article` WHERE `id` < 461694 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.020831s ]
  15. SELECT * FROM `article` WHERE `id` < 461694 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.008268s ]
0.177399s