当前位置:首页>Linux>万字长文 | 彻底搞懂 Linux proc 文件系统

万字长文 | 彻底搞懂 Linux proc 文件系统

  • 2026-03-22 09:21:18
万字长文 | 彻底搞懂 Linux proc 文件系统

要真正掌控 Linux 系统,就不能绕过 /proc 文件系统——它是内核与用户空间沟通的核心桥梁,更是解锁系统监控、调试与性能调优的关键钥匙。与普通磁盘文件系统不同,proc 是虚拟文件系统,不占用物理存储,所有文件和目录由内核运行时动态生成,读取时实时反馈系统状态,是 Linux 可观测性的基石,其核心价值在于以文件化接口暴露内核机密,无需复杂调用即可通过简单文件操作访问系统信息。

从 /proc/cpuinfo、/proc/meminfo 的硬件与内存详情,到进程 PID 目录的实时快照、/proc/sys 的内核参数,proc 覆盖运维与开发核心场景。无论运维排查异常、开发者调试进程,还是初学者探究内核机制,理解 proc 都是必备能力。本文将层层拆解其本质、结构与应用,帮你读懂这个 Linux 深处的“动态信息宝库”。

一、proc 文件系统初相识

1.1 什么是 proc 文件系统

proc 文件系统是 Linux 内核提供的一种虚拟文件系统 。与我们常见的存储在磁盘上的文件系统,如 ext4、xfs 等不同,proc 文件系统并不占用实际的物理存储,它存在于内存之中,是内核在运行时动态生成的。简单来说,它就像是一个反映系统实时状态的 “镜子”,通过一系列特殊的文件和目录,将内核中的各种数据结构、系统运行状态以及进程相关信息展示给用户空间。

在 proc 文件系统中,每个进程都有一个对应的以其进程 ID(PID)命名的目录,比如在我的系统中,当我查看 /proc 目录时,能看到许多数字命名的文件夹,这些就是不同进程的目录。在这些目录里,包含了该进程的各种详细信息,像进程的命令行参数、内存映射、打开的文件描述符等。除了进程相关的目录,proc 文件系统中还有很多系统级别的文件,比如 /proc/cpuinfo 文件记录了 CPU 的型号、核心数、缓存大小等硬件参数;/proc/meminfo 则展示了系统内存的使用情况,包括总内存、可用内存、已用内存以及交换空间的使用信息。

1.2独特之处

与普通文件系统相比,proc 文件系统有许多独特之处。首先,它的内容是动态生成的 。每次读取 proc 文件系统中的文件时,获取到的都是系统当前最新的状态信息。这就好比我们看天气预报,proc 文件系统提供的是实时更新的 “系统状态天气预报”。而普通文件系统中的文件内容,除非手动修改,否则是固定不变的。

其次,proc 文件系统中的部分文件不仅支持读取操作,还支持写入操作 。通过向这些可写文件中写入特定的值,我们可以在不重启系统的情况下,动态地调整一些内核参数,从而改变系统的运行行为。比如,当我们需要启用系统的 IP 转发功能时,可以通过向 /proc/sys/net/ipv4/ip_forward 文件中写入 “1” 来实现,即执行命令 “echo 1 > /proc/sys/net/ipv4/ip_forward”。而在普通文件系统中,文件的读写操作通常是基于文件的实际内容,不会直接影响系统的运行状态。

再者,proc 文件系统在系统监控和配置调整方面具有独特的优势 。它提供了一种直接、高效的方式来获取系统底层信息和调整内核参数,无需借助复杂的系统调用或第三方工具。这使得系统管理员和开发者能够更快速地了解系统运行状况,及时发现并解决问题,同时也方便了对系统进行性能优化和定制化配置。

二、proc文件系统核心原理

2.1 内核与用户空间的桥梁

proc文件系统在 Linux 系统中扮演着内核与用户空间之间桥梁的关键角色 ,实现了两者之间高效的通信。从通信原理来看,当用户空间的程序需要获取内核中的数据时,例如查看系统的内存使用情况,程序会读取/proc/meminfo文件。这个看似普通的文件读取操作,背后却有着复杂而精妙的机制。

内核在接收到对/proc/meminfo的读取请求后,会从其内部的数据结构中提取出内存相关的信息,如总内存大小、已使用内存、空闲内存等,然后将这些信息以文本的形式填充到/proc/meminfo文件中,返回给用户空间的程序。这就像是内核在自己的 “仓库” 里找到用户需要的 “货物”,然后通过proc文件系统这个 “窗口” 递交给用户。

反过来,当用户空间想要修改内核的某些参数时,也可以通过proc文件系统来实现。以调整网络参数为例,假设我们需要临时开启 IP 转发功能,只需要向/proc/sys/net/ipv4/ip_forward文件中写入1。内核在检测到这个文件的写入操作后,会读取文件中的内容,并根据内容更新其内部的网络参数,从而实现 IP 转发功能的开启。这种通过文件读写来实现内核与用户空间通信的方式,不仅简单直观,而且非常灵活,使得用户可以在不重新编译内核的情况下,动态地调整系统的运行参数。

2.2 动态文件生成机制

proc文件系统的动态文件生成机制是其一大特色,它能够实时反映系统的硬件和运行状态。以/proc/cpuinfo文件为例,当用户读取这个文件时,内核并不会从磁盘上读取一个预先存储好的文件内容,而是根据当前系统中 CPU 的实际情况,动态地生成文件内容。内核会从 CPU 相关的寄存器、缓存以及其他硬件状态信息中获取数据,然后将这些数据组织成特定的格式,填充到/proc/cpuinfo文件中返回给用户。

例如,文件中会包含 CPU 的型号、频率、核心数、缓存大小等详细信息。如果系统中的 CPU 发生了变化,比如在支持热插拔 CPU 的服务器上添加或移除了 CPU,下次读取/proc/cpuinfo时,内核会重新生成文件内容,准确地反映出当前 CPU 的状态。这种动态生成机制使得proc文件系统成为了一个实时的系统状态监测工具,用户可以随时获取到系统最真实的运行情况。

2.3 数据结构与组织形式

proc文件系统采用了一种树形的目录和文件组织形式 ,这种结构清晰地展示了系统信息的层次关系。在最顶层的/proc目录下,包含了各种与系统相关的文件和以进程 ID(PID)命名的目录。每个以 PID 命名的目录,如/proc/1234(假设进程 ID 为 1234),里面存放着对应进程的详细信息。这些信息包括进程的命令行参数(/proc/1234/cmdline),通过读取这个文件,可以了解到该进程是如何被启动的;进程的环境变量(/proc/1234/environ),展示了进程运行时的环境设置;进程的内存映射(/proc/1234/maps),详细列出了进程所占用的内存区域以及对应的权限和映射文件等信息。

除了进程相关的目录,/proc目录下还有许多其他重要的文件,用于分类存储不同的系统信息。比如/proc/cpuinfo存放 CPU 信息,/proc/meminfo记录内存使用情况,/proc/loadavg展示系统的平均负载等。这种树形结构和数据关联方式,使得用户可以方便地根据自己的需求,快速定位到想要获取的系统信息。同时,也为系统管理员和开发者提供了一个全面、直观的系统视图,有助于深入了解系统的运行状态和进行故障排查。

三、proc 文件系统里有哪些内容

3.1 系统全局信息文件

在 proc 文件系统的根目录下,存在着许多系统全局信息文件,它们就像是系统状态的 “仪表盘”,为我们提供了系统各个方面的关键信息。

(1)CPU 信息(/proc/cpuinfo):这个文件包含了丰富的 CPU 相关信息,如 CPU 的型号、厂商、核心数、频率、缓存大小等。通过查看它,我们能了解系统硬件的计算能力。例如,在我的服务器上执行 “cat /proc/cpuinfo | grep 'processor'”,可以看到有 8 个处理器核心,说明这是一台具有 8 核心的服务器,在进行多线程任务处理时具备较强的并行处理能力;执行 “cat /proc/cpuinfo | grep 'cpu MHz'”,能获取每个核心的运行频率,比如显示为 “cpu MHz : 2494.999”,表示当前 CPU 核心的运行频率约为 2.5GHz 。这些信息对于评估系统性能、进行任务调度以及优化程序执行效率都非常重要。在进行大数据处理任务时,如果了解到 CPU 的核心数和频率,就可以合理分配任务,充分利用 CPU 资源,提高处理速度。

(2)内存信息(/proc/meminfo):该文件详细展示了系统内存的使用情况,包括总内存(MemTotal)、空闲内存(MemFree)、已用内存(MemTotal - MemFree)、缓冲区(Buffers)和缓存(Cached)等信息。“free -h” 命令的数据就来源于此。比如,当我们执行 “grep -E 'MemTotal|MemFree|MemAvailable|Cached' /proc/meminfo” 时,可能得到如下结果:

MemTotal16301248 kBMemFree8562304 kBMemAvailable12345678 kBCached3890123 kB

从这些数据中,我们可以直观地了解系统内存的整体状况,判断是否存在内存不足的风险。如果 MemFree 的值持续较低,且系统频繁进行内存交换操作,就可能需要考虑增加物理内存或优化内存使用策略。在运行大型数据库时,内存的合理分配和使用至关重要,通过监控 /proc/meminfo 中的数据,可以及时调整数据库的内存参数,确保数据库的高效运行。

(3)系统平均负载(/proc/loadavg):这个文件记录了系统在过去 1 分钟、5 分钟和 15 分钟内的平均负载情况。平均负载是指系统处于可运行状态和不可中断状态的平均进程数。例如,当我们查看 /proc/loadavg 文件时,可能看到 “0.23 0.15 0.10 1/123 1234” 这样的内容,其中前三个数字分别表示过去 1 分钟、5 分钟和 15 分钟的平均负载。一般来说,如果平均负载持续高于 CPU 核心数,说明系统负载较重,可能存在性能瓶颈。在高并发的 Web 服务器环境中,通过监控系统平均负载,可以及时发现服务器是否处于过载状态,以便采取相应的措施,如增加服务器资源或优化应用程序代码。

(4)内核版本(/proc/version):它显示了当前系统所使用的内核版本信息,包括内核的主版本号、次版本号、修订版本号以及编译信息等。比如 “Linux version 5.14.0 - 284.el9.x86_64 (mockbuild@x86-01.bsys.centos.org) (gcc version 11.3.1 20221121 (Red Hat 11.3.1 - 4) (GCC) ) #1 SMP Thu Mar 16 17:05:51 UTC 2023”,了解内核版本有助于我们判断系统的稳定性、安全性以及是否支持某些新特性。在进行系统升级或安装软件时,需要确保软件与当前内核版本兼容。如果内核版本过旧,可能存在安全漏洞,需要及时更新内核以提高系统的安全性。

3.2 进程相关目录及文件

在 proc 文件系统中,每个进程都有一个以其进程 ID(PID)命名的目录,如 /proc/1234(假设进程 ID 为 1234),这些目录下包含了众多文件,用于呈现进程的详细运行时状态。

(1)进程状态汇总(/proc/[PID]/status):这个文件以一种相对友好的格式汇总了进程的关键信息。包括进程状态(运行、睡眠、僵尸等),比如显示为 “State: S (sleeping)”,表示该进程当前处于睡眠状态;进程 ID(PID)和父进程 ID(PPID),通过 PPID 可以追溯到进程的父进程;实际和有效的用户 / 组 ID,用于权限控制;内存使用情况,如 “VmSize: 102400 kB” 表示虚拟内存大小为 102400KB,“VmRSS: 20480 kB” 表示物理内存占用为 20480KB 。通过查看这个文件,我们可以快速了解进程的基本健康状况,判断进程是否正常运行,是否存在内存泄漏等问题。当我们怀疑某个进程出现内存异常增长时,就可以查看该进程的 /status 文件,对比不同时间点的内存使用数据,找出问题所在。

(2)内存映射(/proc/[PID]/maps):此文件详细描述了进程的虚拟内存空间布局。它列出了进程使用的每一段内存区域的起始和结束地址、访问权限(读、写、执行)、偏移量以及映射的文件或资源(如堆栈、堆、共享库)。例如,当我们查看一个 Java 进程的 /maps 文件时,可能会看到类似这样的内容:

00400000 - 0040b000 r - xp 00000000 08:01 1234567 /bin/bash0060a000 - 0060b000 r - - p 0000a000 08:01 1234567 /bin/bash0060b000 - 0060c000 rw - p 0000b000 08:01 1234567 /bin/bash01234000 - 01255000 rw - p 00000000 00:00 0 [heap]7ffff7a0d000 - 7ffff7bcd000 r - xp 00000000 08:01 7654321 /lib64/libc - 2.23.so7ffff7fce000 - 7ffff7fcf000 rw - p 00000000 00:00 0 [stack]

从这些信息中,我们可以清晰地看到进程的代码段、数据段、堆、栈以及共享库的内存映射情况。分析此文件对于调试内存泄漏、理解共享库加载或进行低级性能分析至关重要。如果发现某个进程存在内存泄漏问题,可以通过分析 /maps 文件,找出异常占用内存的区域,进而定位到问题代码。

(3)打开的文件描述符(/proc/[PID]/fd/):该目录包含了进程打开的所有文件描述符的符号链接。每个符号链接以文件描述符编号命名(如 0,1, 2 分别对应标准输入、输出、错误),并指向实际的文件、套接字或管道。比如,当我们执行 “ls -l /proc/1234/fd” 时,可能会看到如下结果:

lrwx------ 1 user user 64 10月 11 10:00 0 -> /dev/pts/0lrwx------ 1 user user 64 10月 11 10:00 1 -> /dev/pts/0lrwx------ 1 user user 64 10月 11 10:00 2 -> /dev/pts/0lrwx------ 1 user user 64 10月 11 10:00 3 -> /home/user/test.txtlrwx------ 1 user user 64 10月 11 10:00 4 -> socket:[123456]

这表明该进程的标准输入、输出和错误都指向了终端设备 /dev/pts/0,文件描述符 3 打开了 /home/user/test.txt 文件,文件描述符 4 是一个网络套接字。通过查看这个目录,我们可以追踪进程的文件操作,查找文件锁的持有者,了解进程与外部资源的交互情况。当一个文件无法正常关闭或出现文件锁冲突时,就可以通过查看该进程的 /fd 目录,找出问题的根源。

(4)启动命令行(/proc/[PID]/cmdline):这个文件保存了启动该进程的完整命令行参数。例如,对于一个启动的 MySQL 数据库进程,查看其 /cmdline 文件可能会看到 “/usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin - dir=/usr/lib64/mysql/plugin --log - error=/var/log/mysqld.log --pid - file=/var/run/mysqld/mysqld.pid” 这样的内容。通过这些信息,我们可以重现进程的运行环境,检查配置参数是否正确传递,对于排查进程启动失败或运行异常等问题非常有帮助。如果 MySQL 数据库启动时出现错误,通过查看 /cmdline 文件,就可以确认启动参数是否正确,是否存在配置错误导致的问题。

3.3 内核可配置参数文件(/proc/sys 目录)

/proc/sys 目录下的文件用于动态调整内核参数,这些参数涉及网络、内存管理、进程管理等多个方面,通过修改这些参数,可以在不重启系统的情况下,优化系统性能或满足特定的应用需求。

  1. 网络参数调整:以 IP 转发为例,/proc/sys/net/ipv4/ip_forward 文件控制着系统是否开启 IP 转发功能。当这个文件的值为 0 时,表示关闭 IP 转发;为 1 时,表示开启。在搭建路由器或进行网络地址转换(NAT)时,就需要开启 IP 转发功能。我们可以通过执行 “echo 1> /proc/sys/net/ipv4/ip_forward” 命令来动态开启 IP 转发,使系统能够转发数据包。另外,像 /proc/sys/net/core/somaxconn 文件,它限制了 listen () 队列的最大长度,在高并发网络应用中,适当增大这个值可以提高系统的连接处理能力,避免因连接队列溢出而导致的连接丢失问题。
  2. 内存管理参数调整:例如,/proc/sys/vm/swappiness 参数表示系统将内存数据交换到磁盘交换空间(swap)的倾向程度,取值范围是 0 - 100。当系统内存紧张时,会将一些不常用的内存页交换到 swap 中。如果服务器的物理内存充足,希望尽量减少内存交换对性能的影响,可以将 swappiness 的值调小,比如设置为 10,即执行 “echo 10> /proc/sys/vm/swappiness” 。这样,系统在内存使用上会更加倾向于使用物理内存,只有在内存非常紧张的情况下才会使用 swap,从而提高系统的整体性能。
  3. 文件描述符限制:/proc/sys/fs/file - max 文件定义了系统级别的文件描述符上限。在一些高并发的应用场景中,如 Web 服务器、数据库服务器等,可能会同时打开大量的文件和网络连接,这就需要适当增大文件描述符的上限。通过执行 “echo 655350> /proc/sys/fs/file - max” 命令,可以将文件描述符上限设置为 655350,以满足应用程序对文件描述符数量的需求,避免因文件描述符不足而导致的错误。

需要注意的是,通过上述方式在 /proc/sys 目录下修改的参数,在系统重启后会恢复默认值。如果希望参数永久生效,通常需要将参数配置写入 /etc/sysctl.conf 文件或 /etc/sysctl.d/ 目录下的配置文件中,然后执行 “sysctl -p” 命令使配置生效。

四、proc 文件系统在实际中的应用

4.1 系统性能监控与优化

在系统性能监控与优化方面,proc 文件系统发挥着举足轻重的作用。我们可以通过读取 proc 文件系统中的相关文件,实时获取 CPU、内存、磁盘 I/O 等资源的使用情况,为性能优化提供精准的数据依据。

比如,在监控 CPU 使用率时,我们可以读取 /proc/stat 文件。这个文件记录了系统启动以来的各种 CPU 统计信息 ,通过对这些信息的分析,我们能够计算出 CPU 在不同状态下的时间占比,从而判断 CPU 的负载情况。例如,通过以下命令可以获取 CPU 的用户态时间、内核态时间、空闲时间等信息:

cat /proc/stat | grep 'cpu '

输出结果可能如下:

cpu  12345 6789 1234 56789 1234 567 89 123 0 0

其中,各个字段分别表示用户态时间、nice 时间(低优先级用户态时间)、系统态时间、空闲时间、I/O 等待时间、硬中断时间、软中断时间等 。通过计算不同时间点这些值的变化,我们可以得出 CPU 在各个状态下的使用率。例如,计算 CPU 使用率的公式可以简化为:

CPU使用率 = 100 * (1 - 空闲时间 / 总时间)

根据 CPU 使用率的情况,我们可以采取相应的优化措施。如果发现 CPU 使用率过高,且主要是用户态进程占用较多,可能需要优化应用程序的代码,减少不必要的计算;如果是内核态占用过高,可能需要检查系统调用是否频繁,或者是否存在内核模块的性能问题。

在内存监控方面,/proc/meminfo 文件是关键。我们可以通过它获取系统内存的总量、已使用内存、空闲内存、缓冲区和缓存等信息。例如,执行以下命令:

grep -E 'MemTotal|MemFree|MemAvailable|Cached' /proc/meminfo

输出结果类似:

MemTotal16301248 kBMemFree8562304 kBMemAvailable12345678 kBCached3890123 kB

当发现内存使用率过高,可用内存不足时,可以考虑优化内存使用策略。比如,清理缓存,释放一些不再使用的内存空间。可以通过执行 “echo 1> /proc/sys/vm/drop_caches” 命令来清理页面缓存;执行 “echo 2 > /proc/sys/vm/drop_caches” 命令清理目录项和 inode 缓存;执行 “echo 3 > /proc/sys/vm/drop_caches” 命令清理页面缓存、目录项和 inode 缓存 。另外,如果系统频繁进行内存交换(swap),可以通过调整 /proc/sys/vm/swappiness 参数来减少交换,提高系统性能。

对于磁盘 I/O 监控,/proc/diskstats 文件提供了磁盘的详细统计信息,包括读写次数、读写字节数、I/O 等待时间等 。例如,通过以下命令可以获取磁盘 sda 的相关信息:

grep 'sda' /proc/diskstats

输出结果可能包含类似以下内容:

8 0 sda 12345 6789 12345678 1234 2345 678 2345678 2345 0 1234 1234

通过分析这些数据,我们可以判断磁盘的 I/O 性能是否正常。如果发现磁盘读写频繁,I/O 等待时间过长,可能需要优化磁盘 I/O 操作。比如,对于频繁读写的应用程序,可以考虑使用缓存机制,减少磁盘 I/O 次数;对于顺序读写的场景,可以调整文件系统的块大小,提高读写效率;还可以检查磁盘是否存在故障,如坏道等,及时进行修复或更换。

4.2 故障排查与问题诊断

当系统出现异常,如进程崩溃、网络故障等情况时,proc 文件系统能成为我们定位问题根源的有力工具。

以进程崩溃为例,假设我们的应用程序突然崩溃,此时可以通过查看 /proc/[PID]/ 目录下的文件来获取关键信息。首先,查看 /proc/[PID]/status 文件,检查进程的状态、信号等信息 。如果进程是因为收到某个信号而终止,在 status 文件中会有相应的记录,比如 “SigQ: 0/1234” 表示信号队列的使用情况,“SigPnd: 0000000000000000” 表示当前进程未处理的信号 。通过分析这些信息,我们可以初步判断进程崩溃的原因是否与信号有关。

接着,查看 /proc/[PID]/coredump 文件(如果启用了核心转储功能),这个文件包含了进程崩溃时的内存快照和堆栈信息 。通过分析核心转储文件,我们可以定位到导致进程崩溃的具体代码行。例如,使用 gdb 工具加载核心转储文件:

gdb /path/to/executable /proc/[PID]/coredump

然后在 gdb 中使用 “bt” 命令查看堆栈回溯信息,就可以看到函数调用栈,从而找出问题所在。

在网络故障排查方面,proc 文件系统同样能提供重要线索。比如,当网络连接出现异常时,可以查看 /proc/net/tcp 文件,这个文件记录了 TCP 连接的状态信息 。通过分析其中的内容,我们可以检查是否存在大量处于 TIME_WAIT 状态的连接,这可能会导致端口资源被占用,影响新的连接建立。例如,执行以下命令统计不同状态的 TCP 连接数量:

awk '{print $NF}' /proc/net/tcp | sort | uniq -c

如果发现 TIME_WAIT 状态的连接过多,可以通过调整内核参数来优化。比如,增大 /proc/sys/net/ipv4/tcp_max_tw_buckets 的值,增加 TIME_WAIT 状态连接的最大数量;或者缩短 /proc/sys/net/ipv4/tcp_fin_timeout 的值,减少连接处于 TIME_WAIT 状态的时间 。另外,查看 /proc/net/dev 文件可以获取网络接口的流量统计信息,帮助我们判断是否存在网络拥塞或异常流量。

再举一个实际案例,曾经有一个基于 Linux 的 Web 服务器,用户反馈访问网站时响应速度极慢。通过查看 /proc/loadavg 文件,发现系统平均负载持续高于 CPU 核心数,说明系统负载较重。进一步查看 /proc/[PID]/status 文件,发现一个 PHP - FPM 进程占用了大量的 CPU 资源。查看该进程的 /proc/[PID]/cmdline 文件,发现是一个复杂的数据库查询脚本在循环执行,导致 CPU 被大量占用。通过优化该脚本,减少不必要的数据库查询,系统负载恢复正常,网站响应速度也得到了提升。

4.3 自动化脚本与工具开发

利用 proc 文件系统,我们可以开发各种自定义的监控脚本和性能分析工具,实现对系统特定指标的定期采集和分析,提高系统管理的效率和自动化程度。

下面是一个简单的 Shell 脚本示例,用于定期采集系统 CPU 使用率和内存使用率信息,并记录到日志文件中:

#!/bin/bashlog_file=/var/log/system_monitor.logwhile truedo    # 获取CPU使用率    cpu_usage=$(top -bn1 | grep 'Cpu(s)' | awk '{print $2 + $4}')    # 获取内存使用率    mem_total=$(grep 'MemTotal' /proc/meminfo | awk '{print $2}')    mem_free=$(grep 'MemFree' /proc/meminfo | awk '{print $2}')    mem_usage=$(echo "scale=2; (1 - $mem_free / $mem_total) * 100" | bc)    timestamp=$(date +"%Y-%m-%d %H:%M:%S")    echo "$timestamp - CPU Usage: $cpu_usage%, Memory Usage: $mem_usage%" >> $log_file    sleep 60 # 每60秒采集一次done

在这个脚本中,通过 top 命令获取 CPU 使用率,通过读取 /proc/meminfo 文件计算内存使用率 ,然后将时间戳、CPU 使用率和内存使用率信息记录到日志文件中。通过将这个脚本加入到系统的定时任务(如 crontab)中,就可以实现对系统 CPU 和内存使用情况的定期监控。

我们还可以开发更复杂的性能分析工具。比如,利用 /proc/[PID]/maps 文件和 /proc/[PID]/smaps 文件开发一个内存分析工具,用于检测进程是否存在内存泄漏。通过定期对比不同时间点进程的内存使用情况,如比较 smaps 文件中的 Private_Dirty 字段(表示进程独占的脏内存大小),如果该值持续增长,就可能存在内存泄漏问题。然后进一步分析 maps 文件,找出内存泄漏发生的具体内存区域和相关代码模块 。这样的工具可以帮助开发者及时发现和解决内存泄漏问题,提高应用程序的稳定性和性能。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-27 11:24:21 HTTP/2.0 GET : https://f.mffb.com.cn/a/481068.html
  2. 运行时间 : 0.115554s [ 吞吐率:8.65req/s ] 内存消耗:5,187.83kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=9f1c7947fe2d7f86350291092b7bd63e
  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.000652s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000873s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000314s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000259s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000658s ]
  6. SELECT * FROM `set` [ RunTime:0.000266s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000749s ]
  8. SELECT * FROM `article` WHERE `id` = 481068 LIMIT 1 [ RunTime:0.000912s ]
  9. UPDATE `article` SET `lasttime` = 1774581861 WHERE `id` = 481068 [ RunTime:0.003262s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000283s ]
  11. SELECT * FROM `article` WHERE `id` < 481068 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000654s ]
  12. SELECT * FROM `article` WHERE `id` > 481068 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.003010s ]
  13. SELECT * FROM `article` WHERE `id` < 481068 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.006547s ]
  14. SELECT * FROM `article` WHERE `id` < 481068 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.016489s ]
  15. SELECT * FROM `article` WHERE `id` < 481068 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.015031s ]
0.117066s