当前位置:首页>Linux>8、Linux调优内存使用率

8、Linux调优内存使用率

  • 2026-03-23 20:09:15
8、Linux调优内存使用率

Linux调优内存使用率

一、配置内存架构

1、物理内存和虚拟内存

系统内存的管理是内核所做的比较复杂的事情之一。高效的内存管理对于系统上良好的进程性能至关重要。计算机系统将内存组织成固定大小的块(chunks),称为页(page)。页面的大小取决于处理器架;对于x86_64,标准页面大小是4KiB。系统上的物理RAM被分为页帧(page frame);一页帧保存一页数据。进程不直接寻址物理内存。相反,每个进程都有一个虚拟地址空间(virtual address space)当进程请求内存时,内核将页帧的物理地址映射到进程地址空间中的虚拟地址。从进程的角度来看,它有一个私有的内存空间,并且只能访问内核映射到它的虚拟地址的物理页帧。除此之外,这还有助于加强安全限制并明确进程之间的划分。进程虚拟地址空间的大小不依赖于安装的物理RAM,而是依赖于处理器架构。在64位x86-64系统上,地址空间大小为2的64次幂字节(16 EiB)单个进程通常不会使用它的整个地址空间。它的大部分是未分配的,也没有映射到任何实际的物理内存。

上面的图显示了64位x86-64系统上的内存组织,页面大小为4 KiB(2的12次幂)每个进程都有一个64位私有虚拟地址空间。高52位(63到12)表示页码,它唯一地标识内存中的页。低12位(11到0)标识存储数据的页面中的偏移量。最新一代的处理器保留了最高的7位虚拟地址,这导致进程无法使用大量的虚拟地址块。只剩下57位。用57位,内核可以寻址RAM的128 PiB(2的57次幂)。CPU制造商使用这种架构来简化处理器的硬件设计。旧的处理器保留虚拟地址的最高16位;系统只能使用48位作为虚拟地址。可寻址虚拟内存为256tib。你可以通过查看/proc/来获取系统的虚拟地址大小cpuinfo文件。

要访问数据,进程必须首先检索相关的物理页面。在57位中,系统使用45位来寻址页帧。内核转(或转换)private。虚拟页号(45位)到RAM中包含数据的实际物理页。对于物理页地址,进程使用较低的12位作为偏移量来访问页中的数据。系统上的物理页面数量取决于可用RAM,通常与进程可以寻址的虚拟页面数量不同。

2、监控进程的内存使用率

大多数进程请求的内存比它们消耗的内存多。当进程请求内存时,它保留虚拟内存地址,但不将它们映射到物理页帧。内核只在进程开始使用其内存时分配物理页帧。ps和top等工具区分了两种统计数据:VIRT(或VSZ),进程请求的虚拟内存总量,以及RES(RSS),进程当前映射到物理内存的虚拟内存总量。通常,RSS是更关键的值,因为它表示实际分配和映射的内存。

此外,进程可以共享物理页面框架。例如,使用相同库函数的进程通常共享存储库代码的物理页帧。一些进程间通信机制还使相关进程共享物理页帧,作为交换数据的一种有效方式。系统根据使用共享页面的每个进程的RSS值来计算共享页面的数量。#限制进程内存使用从Red Hat Enterprise Linux 7开始,你可以通过cgroups限制应用程序可以使用的内存。对于你的应用程序,创建一个systemd drop-in文件,并在[Service]部分下定义MemoryLimit参数。可以使用K、M、G或T后缀指定以千字节、兆字节、千兆字节或千兆字节为单位的内存大小

3、监控页面使用错误

因为每个进程都维护自己的虚拟地址空间,所以每个进程都有一个"页表"来跟踪其虚拟页到物理页的映射。每个虚拟页在表中都有一个条目。当进程访问一个系统还没有映射到表中的物理页帧的页面时,内核会生成一个页错误事件(pagefault)当进程在分配后第一次访问页面时,发生该事件。在这种情况下,内核会生成一个小页面错误(minor page fault),并从RAM中分配一个新的物理页面帧。一个minor page fault会导致少量的开销。但是,如果缺少物理页帧,并且系统需要从磁盘检索该内存页,内核会生成一个重大的页错误事件(major page fault)。例如,当内核将页面换出,或者当它需要将程序和库代码从磁盘加载到内存时,就会发生此事件。重大的页面错误(major page fault)会对性能产生重大影响,因为内核必须从磁盘加载页面。要查看每个进程的次要和主要页面错误,使用ps命令,询问minflt和majflt列:

还可以监控流程的minor-faults和major-faults perf事件。

4、介绍表和TLB

请记住,每个进程都有一个页表,用于跟踪其虚拟页到物理页的映射。这种机制的问题在于,如果每个进程在内存中分配一个大表来跟踪这些映射,即使进程只需要一些映射,那么这个表本身就会很大。在x86-64系统上,它将需要2的45次幂个条目,每个进程可能需要数百个GiB。为了减少内存使用,系统将页表分解为页目录的层次结构,这些页目录指向更小的页表,这些页表最终指向页表条目。系统只需要分配包含进程正在使用的地址的页目录或页表,从而减少内存中映射总表的大小。2^45->2^9+2^9+2^9+2^9+2^9=2560

在分层页表上查找页映射的过程代价非常高。因此,当系统将一个从虚拟地址到物理地址的映射添加到页表中时,它也会在一个称为Translation Look-aside的专用硬件缓存中缓存条目,即TLB。这个CPU缓存通过缓存进程最近使用的页面映射来加速地址转换。由于程序倾向于按顺序访问它们的内存,如果一个程序访问同一页上的两个地址,那么第二次访问就会从TLB快速获得映射,而不是在页表中进行长时间的查找。

要检查系统中的TLB丢失,请使用perf来监视dTLB-load-misses事件。此事件对虚拟机不可用。

5、管理大页(huge page)

处理器中TLB条目的数量是固定的,不是很大。对于访问大量内存的进程(如数据库),可能会导致大量TLB丢失,从而影响性能。除了4个KiB页面之外,Linux内核还通过大页面机制支持大内存页面。x86_64架构支持多种页面大小,通常是4kib、2mib和1GiB。Red Hat Enterprise Linux默认使用2 MiB的巨大页面大小,但是你可以通过hugepagesz=???kernel参数来更改这个大小。查看/proc/meminfo文件,确定特定系统上巨大页面的大小。#cat /proc/meminfo对于大型页面,每个TLB条目现在可以寻址2个MiB页面,而不是标准的4kib页面。拥有指向更多内存的更少TLB条目意味着更有可能发生TLB命中。每当系统执行上下文切换时,内核通常必须为被调度出去的进程刷新TLB条目。如果要分配大内存页,使用vm.nr_hugepages的sysctl参数来设置需要的大内存页的总数。sysctl-w vm.nr_hugepages=20在前面的示例中,管理员请求内核分配20个巨大的内存页面。在2MiB大页的情况下,系统总共分配了40MiB大页。如果有足够的空闲、连续的内存来满足请求,系统才会分配请求的页面。如果内核无法满足请求,它将从请求的数量中分配尽可能多的巨大内存页。要验证分配的大页面的数量,请检查/proc/meminfo的内容。[CICD1 root ~] # cat /proc/meminfo | grep -i hugeAnonHugePages: 73945088 kBShmemHugePages: 0 kBFileHugePages: 0 kBHugePages_Total: 0HugePages_Free: 0HugePages_Rsvd: 0HugePages_Surp: 0Hugepagesize: 2048 kBHugetlb: 0 kB由于内核必须将巨大的页面作为连续的内存分配,因此在运行时分配它们可能是一项挑战,因为随着时间的推移,内存会变得更加碎片化。在这种情况下,打开/etc/sysctl.conf文件中的参数,定义vm.nr_hugepages,然后重新启动系统。注意,通过将内存分配为大页面,只有支持大页面的应用程序才能使用这些内存。内核从一般可用的系统内存中移除巨大的页面内存,大多数进程都不能使用它。为了使用大页内存,进程必须使用mmap()系统调用或shmat()和shmget()系统调用来请求它们。如果进程使用mmap()系统调用,则需要挂载hugetlbfs文件系统。#在NUMA系统中的大页在NUMA系统上,内核统一地在所有NUMA节点上划分巨大的页面。当数据库等应用程序需要将其所有的巨大页面都放在一个节点上时,其中如果进程正在运行,请使用/sys/devices/system/node/nodeN/hugepages/hugepages-2048kB/nr_hugepages可调项来代替全局vm.nr_hugepages参数。例如,如果你想在NUMA节点2上分配20个大页,使用下面命令:echo 20 > /sys/devices/system/node/node2/hugepages/hugepages-2048kB/nr_hugepages你可以使用numastat命令查看大页numa节点大页内存的情况。(需要安装numactl软件包)

从红帽RHEL6.2开始,内核默认开启Transparent Huge Page(透明大页THP)。THP与标准的大页面不同之处在于,内核会自动分配和管理它们。与标准的大页面不同,系统还可以将它们从内存中交换出来。/sys/kernel/mm/transparent_huge_page/enabled可以控制是否开启透明大页功能。always表示开启never表示关闭madvise,关闭自动THP分配。希望使用THP的进程必须使用madvise()系统调用。当transparent_hugepage/enabled设置为always或madvise时,khugepaged守护进程自动启动,当参数设置为never时,khugepaged守护进程自动关闭。khugepaged守护进程扫描内存,对内存进行碎片整理,并将标准页面合并为巨大的页面。可以使用下面命令检查THP使用情况。[CICD1 root ~] # grep -i anonhugepage /proc/meminfoAnonHugePages: 74536960 kB关闭或者开启THP可以在tuned.conf的[vm]部分添加transparent_hugepages参数。[vm]transparent_hugepages=never数据库程序不建议使用THP,你可以通过使用vm.nr_hugepages参数分配标准的大页。

二、配置内存分页和回收

1、介绍系统内存和页缓存

内核使用系统内存有两个目的:1.页缓存:内核使用大部分未分配的内存作为缓存来存储从磁盘读取或写入的数据。下次进程需要该数据时,系统从RAM而不是磁盘中获取它。这种缓存机制通常可以显著提高性能,因为存储通常比物理内存慢得多。2.匿名页:匿名页与磁盘上的数据没有关联。匿名页是进程分配和用于存储其工作数据的页。你可以使用free和vmstat命令查看内存的使用情况。

在此输出中,请注意,尽管系统有120 GiB的RAM,但只有353个MiB是空闲的。页面缓存(buff/cache列中)消耗了大部分内存,这可能是因为系统最近执行了大量存储I/O。如果需要,如果从缓存中释放数据,则系统有104 GiB (106143 MiB)的空闲内存(来自可用)。然而,丢弃缓存会损害I/O性能。可以使用vmstat命令实时监视内存使用情况。

在vmstat输出中,页面缓存的大小是buff和cache列的总和。buff列表示缓冲区,它是页缓存的一部分。这些缓冲区存储直接从块设备读取的数据块,而不经过文件系统。#绕过页缓存的程序在访问磁盘上的数据时,一些应用程序使用直接I/O,这绕过了页面缓存。例如,一些数据库系统提供自己的内部进程缓存,并使用直接I/O进行磁盘访问。有些使用直接I/O访问专用的原始块设备。其他的则通过配置了直接I/O属性的文件执行直接I/O。对于重复访问相同文件或文件的相同部分(如文件服务器)的应用程序,页面缓存提供了显著的性能改进。只顺序读取文件一次的应用程序,例如笔记本电脑上的视频播放器,从页面缓存中得到的价值很少。

2、回收匿名页

当系统处于内存使用压力时,内核可以选择回收匿名页或从页缓存中回收页。不受文件支持的匿名页被移到swap区。使用swap可以增加有效内存的数量。随着空闲内存的减少,内核可以换出进程没有积极使用的内存页。然后将这些回收的页面用于其他请求。当进程需要在swap区中分页时,出现重大分页故障,内核将分页从磁盘中移出并将其分配回内存中的进程。swap区比较慢,因为大多数存储设备都比内存慢。过多的分页会大大降低系统的速度。vmstat程序提供关于系统是否正在进行分页swap的信息。vmstat输出中的关键列是si等,即每秒swap input的页面和每秒swap out的页面。

前面的输出显示了一个快速将页面交换到磁盘的系统。在最新的几行中,so列中的值表明系统正在快速换页。swpd值表示已使用的swap空间数量,如果存在足够的空闲swap空间,则该值不重要。将页面位于swap区不会影响性能,而且可以将不需要的页面移出主内存,释放内存用于其他用途。正如si等指标所报告的那样,频繁进出交换区域的分页活动会影响性能。#进程工作集介绍进程可能在启动时分配并填充大量内存,但在任何时候只使用该内存的一部分。这组活动物理内存页称为进程“working set”。在过程生命周期内,工作集会增加或减少。系统在全局级别上跟踪这些活动页面。在内存压力下,内核使用该信息来选择对哪个内存进行分页,同时保留活动页面

上面的图表显示可用的RAM正在减少。系统已经换出交换区中的一些进程匿名页。但是请注意,来自进程工作集的所有页面仍然在RAM中。在这种情况下,运行的应用程序不会导致性能下降,至少只要它们的工作集没有改变,并且不需要来自swap区的页面。#建议继续创建交换空间管理员应该根据系统上的内存工作负载来确定swap区域的大小。应用程序供应商有时会提供关于该主题的建议。下表根据物理内存总量提供了一些指导。系统可以有多个分区,可以在/etc/fstab配置中对分区进行优先级排序。与机械硬盘相比,ssd更适合作为swap分区,因为它们的吞吐量更高,延迟更低。在直接I/O需要大量连续内存(而不是内存映射)的场景中,swap空间是必要的。系统可以处理连续的内存需求,但前提是存在足够的swap空间,可以将支持文件的和匿名的页面移出,以创建足够的连续内存空间。

3、回收页缓存和调优swap

当内核需要释放内存页时,它有两种选择。它可以将进程匿名页换出到交换区域,也可以从页缓存中删除页。因为页缓存中的页存储磁盘中的数据,所以如果数据发生了更改,系统可以将数据写回磁盘并回收页。通过调优vm.swappiness sysctl参数,你可以影响内核的选择。该参数接受0到100之间的值。设置vm.swappiness参数设置为100,系统几乎总是倾向于将匿名页面分页到交换区域,而不是从页面缓存中回收页面。使用这个值,内核保留页面缓存,这可以显著提高I/O高工作负载的性能。例如,在文件服务器环境中,最好将文件数据保存在页面缓存中,而不是丢弃这些数据并必须稍后从磁盘重新读取它们。另外,设置vm.Swappiness参数设置为1,则迫使系统尽可能少地进行交换。这种调优可能会使系统响应更迅速,但以牺牲文件系统性能为代价。不使用页面缓存的应用程序通常受益于此设置。例如,一个数据库系统需要在内存中保存它的表和数据结构,它可以从低vm.swappiness中受益。一些数据库软件制造商有应该用于此可调项的特定值。从RHEL 6.4开始,设置vm.swappiness为O将会导致机器只在最后才使用交换空间。使用cgroups,你可以使用内存cgroup控制器的memory.swappiness可调项为不同的cgroups设置不同的swappiness值#使用SSD作为swap分区SSD设备的运行速度明显快于机械磁盘。从交换中读取是随机操作,因为系统无法预测应用程序何时需要换出页面。对于机械磁盘,随机读取的代价太高,但对于ssd不是这样。在使用机械磁盘时,通常要调优系统以避免不惜一切代价进行交换。通过允许系统使用SSD上的交换区,内核可以更好地平衡页面缓存和匿名页面,而不会有太多的性能损失。当页面缓存来自机械磁盘时,此配置特别有用。将一些匿名页换出或换入到SSD交换区比放弃页缓存并不得不从旋转磁盘重新读取数据要快得多。因此,当系统使用ssd盘作为交换区时,需要增加vm.swappiness的值,以更好地管理其内存并将不活动的页面移动到交换。如果有多个交换区域,系统将串联使用它们。内核使用第一个激活的交换区,直到它被填满,然后开始使用下一个交换区。但是,你可以在/etc/fstab文件中设置挂载选项pri=value来指定每个空间的优先级。系统首先填充优先级最高的交换区,然后再转移到优先级较低的交换区。通过这种方式,你可以优先考虑较快的磁盘而不是较慢的磁盘。

4、脏页面清理调优

一个物理页面可以处于不同的状态:Free-该页面可立即分配。Active—页面正在被积极使用,而不是被释放的候选对象。Inactive clean—页面没有被积极使用,其内容与磁盘上的内容匹配。Inactive dirty—页面没有被积极使用,但是页面内容在从磁盘读取后已经被修改,还没有被写回。要查看活动、非活动和脏内存的数量,请检查/proc/meminfo文件。[CICD1 root ~] # cat /proc/meminfo"Active": 78763712 kB"Inactive": 95653344 kB"Dirty": 2408 kB对于每个进程的查看,使用/proc/PID/smaps文件。该文件详细描述了分配给进程的每个内存段,包括干净内存和脏内存的大小。要解析文件,编写一个小的awk程序,如下所示:

回收处于非活动清理状态的页面成本很低,因为数据已经在磁盘上。但是,回收处于不活动脏状态的页面首先需要将数据写回磁盘。此外,由于内存是易失性的(断电时内容会丢失),系统会定期将脏页写入磁盘,以防止在断电时数据丢失。系统通过flush-MAJOR:MINOR 内核线程处理脏页写回。内核只在需要时启动这些线程,并且每个块设备启动一个线程,由它的主号和副号标识。一大堆sysctl参数控制刷新线程何时开始将数据写入磁盘。vm.dirty_expire_centisecs—脏数据在内核考虑将页面写到磁盘之前必须是多久(以百分之一秒为单位)。此参数阻止内核快速连续多次写入同一个页面,因为进程不断修改页面内容。vm.dirty_writeback_centisecs—指定多长时间 pdflush/flush/kdmflush 这些进程会唤醒一次,然后检查是否有缓存需要清理。(以百分之一秒为单位)。将该参数设置为0完全禁用周期性回写。vm.dirty_background_ratio—内存可以填充脏数据的百分比。这些脏数据稍后会写入磁盘,pdflush/flush/kdmflush这些后台进程会稍后清理脏数据。比如设置为10时,我有32G内存,那么有3.2G的脏数据可以待着内存里,超过3.2G的话就会有后台进程来清理。vm.dirty_ratio—是可以用脏数据填充的绝对最大系统内存量,当系统到达此点时,必须将所有脏数据提交到磁盘,同时所有新的I/O块都会被阻塞,直到脏数据被写入磁盘。这通常是长I/O卡顿的原因,但这也是保证内存中不会存在过量脏数据的保护机制。2.5处理OOM事件还有两个参数vm.dirty_background_bytes和vm.dirty_bytes是另一种指定这些参数的方法。如果设置_bytes版本,则_ratio版本将变为0,反之亦然。设置较低的比率会导致更频繁但更短的写入,这适合于交互式系统。设置更高的比率会导致更少但更大的写操作,从而减少总开销,但可能导致交互应用程序的响应时间更长。大多数调优配置文件至少修改前面的一个设置。例如,来自tuned-profiles-oracle调优配置文件进行以下调整:

通过这种配置,如果脏页超过系统内存的3%,那么机器就开始从页缓存中写脏页,但是直到脏页超 过系统内存的40%时才强制写脏页。在最近5秒(500厘秒)内未被修改的脏页面将成为刷新到I/O子 系统的候选者。每一秒(100厘秒),系统检查页面是否过期,是否需要写入磁盘。通过这些设置, 系统可以执行较小但频繁的写入操作。

5、处理OOM事件

当发生小的页面错误但没有可用的空闲页面时,内核会尝试回收内存以满足请求。如果它不能回收 足够的内存,就会发生内存不足的情况。这种情况通常发生在没有更多可用内存和交换空间时。 默认情况下,一个称为内存不足杀手(OOM杀手)的内核子系统选择并杀死一个进程来释放内存,以 便系统能够满足请求。如果条件仍然存在,系统将再次触发OOM杀死器,以杀死第二个进程,以此 类推。 因为以这种方式杀死应用程序的某些进程可能会损坏或损坏应用程序数据,所以你可以设置 vm.panic_on_oom sysctl可调为1而不是0。有了这个值,内核就会停止进程,而不是杀死进 程。 注意:一旦系统达到了内存不足的情况,就没有太多合理的恢复选项。关闭进程以释放内存或放弃 并关闭系统都是可能的选择。一般来说,如果可能的话,最好避免让系统进入内存不足的状态。 每个进程都有一个不良评分,可以在/proc/PID/oom_score文件中查看。内核维护该分数,并使 用它来确定哪个进程应该被OOM杀死。分数越高,OOM杀手就越有可能杀死这个过程。内核本身和 PID 1 (systemd)不受OOM杀手的影响。 该系统使用了一些因素来计算这个分数: 1.虚拟内存大小。 2.进程所有子进程的累积虚拟内存。 3.nice值,正nice的值会得到更高的分数。 4.总运行时间,较长的总运行时间会降低分数。 5.运行用户、根用户进程得到轻微保护。 6.直接硬件访问的进程会降低分数。 你可以使用/proc/PID/oom_score_adj可调项手动调整分数。这个可调参数的值介于-1000到 1000之间,其中0是默认值。值-1000表示免疫。OOM杀手从不扼杀-1000分的进程。内核自动将任 何其他值添加到进程oom_score值中。 注意:另一个已弃用的可调项仍然可用:/proc/pid/oom_adj.此可调项以类似的方式工作,但接 受介于-17(豁免)和15之间的值。 当free仍然报告有可用内存时,系统也可能处于内存不足的状态。当在cgroup中设置了内存限 制,并且在group中的进程消耗所有内存时,就会发生这种情况。在NUMA系统上,当节点中没有更 多可用的内存时,进程向该节点请求内存,系统也会触发OOM杀手。 #使用systemd调整OOM分数 要在启动时调整应用程序的评分,创建一个systemd文件,并在[Service]部分下定义 OOMScoreAdjust参数。

OOMScoreAdjust参数接受-1000(免疫度)到1000之间的值。

三、NUMA

1、NUMA介绍

在较老的多处理器系统上,cpu可以平等地访问所有内存。这意味着所有内存地址的访问时间是相 同的,无论哪个CPU执行操作。FSB(shared front-side bus)用于连接cpu和主存。这种内存 架构称为UMA(Uniform memory Access)

在更现代的多处理器系统上,情况不再是这样了。在NUMA(Non-uniform Memory Access)系统 中,每个CPU(或物理CPU)直接访问一组内存库,CPU之间通过高速链路相互连接。整个内存仍然 可以从任何CPU访问,但是访问本地内存比通过互连访问远程内存要快。这种情况下,内存访问时 间是不均匀的。

为了管理NUMA拓扑,Linux将系统划分为节点。节点将物理CPU和本地内存进行分组。上图显示了 一个具有八个物理cpu和八个NUMA节点的系统。 cpu之间并不总是直接相互连接。在图中,请注意CPU O与CPU 3有直接连接,但与CPU 5没有直接 连接。为了让CPU O访问节点5上的内存,它必须经过两个链路,从而进一步减慢了内存访问时 间。 在NUMA拓扑中,I/O控制器与一些cpu直接连接。处理特定PCI-e设备(例如高速网卡)的应用程序 通常可以在与关联设备相同的NUMA节点上运行。

2、管理NUMA

Red Hat Enterprise Linux 7引入了numa感知的调度和内存分配特性。自动NUMA亲和性管理 特性监视NUMA拓扑和资源使用情况,动态改进NUMA资源分配和管理。该算法定期检查系统并重新 定位进程或它们的内存,以提高局部性。 在Red Hat Enterprise Linux 6上,numad用户空间守护进程提供相同的功能。尽管numad包 在redhat Enterprise Linux 7和8中仍然可用,但必须禁用自动NUMA平衡算法才能使用它。为 此,需要设置kernel.numa_balancing sysctl可调为0。 一些工作负载使用自动NUMA平衡效果更好,另一些工作负载使用numad服务效果更好。这些机制的 好处在具有长时间运行的流程并消耗系统资源的系统上最为显著。在那些进程不是资源密集型的且 只运行几秒钟的系统上,它们不太可能提高性能。 #检查NUMA拓扑 可以使用numactl--hardware查看系统如何划分numa节点。 [CICD1 root ~] # numactl --hardware available: 2 nodes (0-1)node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 node 0 size: 128366 MB node 0 free: 25577 MB node 1 cpus: 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 node 1 size: 128977 MB node 1 free: 44591 MB node distances: node 0 1 0: 10 21 1: 21 10 该命令显示哪些处理器位于哪些节点中,以及每个节点可用的内存量和正在使用的内存量。在输出 的底部,矩阵表示节点之间内存访问的相对权重,越低越快。 来自hwloc-gui包的lstopo命令提供了拓扑的图形视图。

前面的输出只显示了4节点NUMA系统中的两个节点(由于图像大小限制)。注意该命令如何显示每个 CPU包的内核和线程(或用于Processing Unit的PU)。 lstopo命令还显示CPU与I/O控制器和设备的连接(在前面的屏幕截图中没有显示)。 #监控NUMA内存使用情况 同样来自numactl包的numastat命令提供一些内存使用统计信息。使用-m选项,numastat命令以 类似于/proc/meminfo文件的方式显示每个节点的内存使用情况。-c选项允许更紧凑的视图。

numastat命令还接受PID或进程名作为参数。在这种情况下,它列出了进程的每个节点内存使用 情况。 [CICD1 root ~] # numastat -c sshd Per-node process memory usage (inMBs)PID Node 0 Node 1 Total ------------------------------ 2464(sshd)3 5 8 41558(sshd)4 6 10 41563(sshd)2 3 6 148520(sshd)5 6 10 148529(sshd)3 3 6 196993(sshd)5 5 10 196996(sshd)4 2 6 ------------------------------ Total 26 30 56 特殊的/proc/PID/numa_maps文件也提供了更详细的信息。有关该文件的描述,请参阅numa(7)手册页。 #使用NUMA节点关联内存 对于一些工作负载,你可能希望手动组织节点上的进程,而不是依赖于自动NUMA平衡算法。要在 特定节点中运行进程,使用numactl命令启动它,并传递允许的CPU和内存节点。下面的命令在节 点2的CPU上启动myprogram进程。如果可能,系统还应该从节点2分配内存。单独的--字符表示 numactl选项的结束。下面是应用程序名称及其选项。 numactl--cpunodebind=--preferred=-- myprogram 下面的命令在节点2的CPU上启动myprogram进程,并需要节点2或节点3的内存。如果系统不能从 其中一个节点分配内存,那么OOM杀死程序就会终止进程。 numactl--cpunodebind=--preferred=2,3 -- myprogram NUMA可能会导致一些意想不到的性能变化。如果应用程序的内存占用不适合本地节点,则性能可 能会发生变化或难以预测。如果数据库占用了大部分系统内存,你可能会遇到这种情况。根据所访 问数据的位置不同,性能可能会有很大差异。 对于这样的工作负载,为了获得更可预测的性能,可以使用numactl命令在所有节点之间交错所有 对内存的访问。 3.3为虚拟机管理NUMA 4.管理内存过量分配 4.1内存过量分配介绍 numactl--interleave all -- mydatabase 作为一种替代方案,你可以在BIOS级别禁用NUMA,通常通过一个称为“Socket Interleave”的 选项或类似选项,并将NUMA=off选项添加到内核命令行。

3、为虚拟机管理NUMA

Red Hat Enterprise Linux、Red Hat OpenStack平台或Red Hat虚拟化上的KVM允许你为虚 拟机定义NUMA拓扑。例如,你可以创建一个有四个NUMA节点的虚拟机,而另一个只有两个节点的 虚拟机。你为这些机器定义的拓扑结构不必与物理主机的NUMA体系结构相匹配。 使用NUMA拓扑创建虚拟机的一个好处是,可以将虚拟NUMA节点与物理NUMA节点关联或固定。通过 这种方式,你可以组织系统上运行的虚拟机,以便更好地使用资源并提高性能 Red Hat虚拟化web管理门户提供了一个图形界面来配置虚拟机的NUMA拓扑和固定。 在Red Hat Enterprise Linux上,用于创建虚拟机的virt-install命令提供了几个有用的选 项。--cpu选项定义虚拟机NUMA拓扑,--numatune和--cputune选项将虚拟NUMA节点与物理 NUMA节点和cpu关联起来。

四、管理内存过量分配

1、内存过来分配介绍

Linux内核允许应用程序分配比系统上可用的更多的内存。这个特性称为内存超量使用。记住,当 进程请求内存时,它只保留虚拟内存,而不消耗任何RAM。内核只在进程开始使用其内存时分配物 理页帧。因为大多数进程请求的内存比它们消耗的内存多,所以系统可能会过度使用内存。

上面的图表显示所有进程虚拟内存的总和大于可用的物理内存。系统正在过度使用内存。但是,进 程实际使用的内存总和小于物理内存。 Red Hat Enterprise Linux、Red Hat OpenStack平台或Red Hat虚拟化平台上使用KVM(基 于内核的虚拟机)的虚拟机,其运行方式与主机系统上的正常进程相同。在图中,两个qemu-kvm进 程对应两个虚拟机。 如果将客户机配置为16gib的RAM,那么当虚拟客户机开始使用它的内存时,主机系统只分配物理 页帧。内存复用是虚拟化的一个基本特性,因为它允许整合主机上的更多虚拟系统,并更有效地使 用硬件资源。 对于以Red Hat OpenShift或Red Hat Enterprise Linux系统上的podman命令开始的容器, 情况也一样。对于内核,容器是运行在主机上的一组进程。 如果空闲RAM快用完,系统会按照通常的方式回收页面:从页面缓存中回收,或者将不活动的匿名 页面换出到交换区。 当机器处于内存过度分配的情况下,现在必须交付比可能的更多的内存时,内核调用OOM杀死器, 它会杀死一些进程。

2、配置内存过量分配

你可以使用vm.overcommit_memory可调项控制系统的内存过度分配策略。 0:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允 许;否则,内存申请失败,并把错误返回给应用进程。 1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何。 2:表示内核允许分配超过所有物理内存和交换空间总和的内存。 /proc/meminfo文件中的Committed_AS字段显示了为避免当前工作负载的内存不足情况,系统需 要多少RAM的估计。 内存超量使用对于用FORTRAN编写的科学和工程应用程序非常有用。FORTRAN程序在实际需要内存 时才为数据结构分配内存。内存超量使用使运行分配巨大数据结构的程序成为可能,但只利用其中 的一小部分数据。自Red Hat Enterprise Linux 6起,vm.overcommit_memory的默认值为 0

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-27 09:49:54 HTTP/2.0 GET : https://f.mffb.com.cn/a/482007.html
  2. 运行时间 : 0.123513s [ 吞吐率:8.10req/s ] 内存消耗:4,980.48kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=0185e0cc263b2e9fe117effd7720b66b
  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.000623s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001105s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000455s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000428s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000765s ]
  6. SELECT * FROM `set` [ RunTime:0.000300s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000977s ]
  8. SELECT * FROM `article` WHERE `id` = 482007 LIMIT 1 [ RunTime:0.001050s ]
  9. UPDATE `article` SET `lasttime` = 1774576194 WHERE `id` = 482007 [ RunTime:0.008581s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000431s ]
  11. SELECT * FROM `article` WHERE `id` < 482007 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000916s ]
  12. SELECT * FROM `article` WHERE `id` > 482007 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000721s ]
  13. SELECT * FROM `article` WHERE `id` < 482007 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.003697s ]
  14. SELECT * FROM `article` WHERE `id` < 482007 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.004618s ]
  15. SELECT * FROM `article` WHERE `id` < 482007 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.004096s ]
0.125138s