当前位置:首页>Linux>Linux进程内存监测与内存泄漏示例

Linux进程内存监测与内存泄漏示例

  • 2026-06-28 12:44:56
Linux进程内存监测与内存泄漏示例

在嵌入式Linux开发中,如果存在编程不当,申请的内存未按预期释放,就会存在内存泄漏的情况,严重的时候会导致整个程序因oom而崩溃,本篇先简单介绍一些Linux系统中查看指定进程的内存使用情况的方法,并通过一个实例来对比查看出现内存泄漏后的内存占用情况。

1 Linux进程内存使用情况的查看方法

这里暂且先介绍两种方式,查看status文件和查看smaps文件

1.1 proc/pid/status中的VmRSS

在 Linux 系统中,/proc/[pid]/status 文件中的 ‌VmRSS‌(Virtual Memory Resident Set Size)表示进程当前实际占用的‌物理内存大小‌。

示例:

1.2 proc/pid/smaps中的USS(Private_Clean + Private_Dirty)

在 Linux 系统的 /proc/[pid]/smaps文件中,‌Private_Clean‌ 和 ‌Private_Dirty‌ 之和代表了该进程‌独占的、实际驻留在物理内存中的页面大小‌。

  • ‌Private (私有): 指该内存页仅被当前进程引用(引用计数为 1),其他进程无法访问。这通常包括进程的堆(heap)、栈(stack)以及私有数据段。
  • Clean (干净)‌: 指该内存页的内容与 backing store(如磁盘上的文件映射或初始状态)‌一致‌,未被修改过。如果系统需要回收内存,可以直接丢弃这些页,无需写回磁盘。
  • Dirty (脏)‌: 指该内存页的内容‌已被修改‌,与原始来源不一致。如果系统需要回收这些页,必须先将数据写回交换分区(Swap)或关联的文件中。

Private_Clean 与 Private_Dirty 之和即为该进程的 ‌USS‌(Unique Set Size,唯一集大小)

示例:

一共18个内存分段:

  • 程序自身 ELF 文件映射段(3 段)
    • 55ee5c381000-55ee5c389000 r-xp … test5:可执行代码段 (.text)
    • 55ee5c588000-55ee5c589000 r--p … test5:只读常量段 (.rodata)
    • 55ee5c589000-55ee5c58a000 rw-p … test5:全局数据段 (.data/.bss)
  • 进程堆段(1 段)
    • 55ee5d904000-55ee5d925000 rw-p … [heap]:堆内存
  • libc-2.27.so C 标准库映射(5 段)
    • 7f8fb5397000-7f8fb557e000 r-xp … libc-2.27.so:代码段.text
    • 7f8fb557e000-7f8fb577e000 ---p … libc-2.27.so:保护隔离页 (Gap 防护页)
    • 7f8fb577e000-7f8fb5782000 r--p … libc-2.27.so:只读常量段.rodata
    • 7f8fb5782000-7f8fb5784000 rw-p … libc-2.27.so:全局数据段
    • 7f8fb5784000-7f8fb5788000 rw-p …(匿名):匿名私有段
  • 动态链接器 ld-2.27.so 映射(5 段)
    • 7f8fb5788000-7f8fb57b1000 r-xp … ld-2.27.so:链接器代码段
    • 7f8fb598b000-7f8fb598d000 rw-p …(匿名):链接器运行时匿名内存
    • 7f8fb59b1000-7f8fb59b2000 r--p … ld-2.27.so:链接器只读常量段
    • 7f8fb59b2000-7f8fb59b3000 rw-p … ld-2.27.so:链接器全局数据段
    • 7f8fb59b3000-7f8fb59b4000 rw-p …(匿名):链接器额外匿名私有内存
  • 内核预留特殊匿名段(4 段)
    • 7ffe646ef000-7ffe64710000 rw-p … [stack]:主线程栈
    • 7ffe64798000-7ffe6479b000 r--p … [vvar]:内核只读变量页
    • 7ffe6479b000-7ffe6479c000 r-xp … [vdso]:虚拟动态共享库
    • ffffffff600000-ffffffffff601000 --xp … [vsyscall]:老式系统调用兼容段

1.3 获取RSS与USS的简易脚本

USS的计算:

  • 首先通过ps和grep、awk指令过滤出指定进程(本例中是名为test5的程序)的进程id
  • 然后读取该进程id的smaps文件,再通过awk指令计算出Private_Clean + Private_Dirty得到USS

RSS的计算:

  • 读取该进程id的status文件,grep指令找到VmRSS对应的大小
#!/bin/bashPID=`ps -aux | grep test5 | grep -v grep | grep -v test5.c | awk '{print $2}'`FILE=/proc/$PID/smapsif [ ! -f "$FILE" ]; thenecho"进程 $PID 不存在"exit 1fi# 计算 USS = Private_Clean + Private_DirtyUSS_KB=$(awk '/Private_Clean/ {pc += $2}               /Private_Dirty/ {pd += $2}               END {print pc + pd}'"$FILE")RSS_KB=$(grep VmRSS /proc/$PID/status | awk '{print $2}')echo"PID: $PID"echo"USS: $USS_KB KB ($((USS_KB/1024)) MB)"echo"RSS: $RSS_KB KB ($((RSS_KB/1024)) MB)"

这里解释下USS_KB的计算:

USS_KB=$(awk '/Private_Clean/ {pc += $2}
  • USS_KB=:定义 Shell 变量,用来存储最终计算结果
  • $(...):命令替换,把括号内命令的输出赋值给变量
  • awk:调用 awk 文本处理工具逐行扫描$FILE 文件
  • /Private_Clean/:awk 匹配规则:只要当前行包含字符串 Private_Clean
  • {pc += $2}:匹配成功后执行的动作
    • $2:当前行的第二个字段(默认以空格 / 制表符分割列)
    • pc:自定义变量,初始值默认为 0,pc += $2,即所有Private_Clean行的第 2 列数值全部累加存入pc
/Private_Dirty/ {pd += $2}
  • 类似的,所有Private_Dirty行的第 2 列数值全部累加存入pd
END {print pc + pd}' "$FILE")
  • END { ... }:awk 内置结束块,等文件所有行全部遍历处理完之后,只执行一次
  • print pc + pd:打印两个累加值相加的结果
  • "$FILE":awk 脚本结束,指定要处理的文件是 Shell 变量 $FILE

该脚本运行一次检查一次,若想持续运行,也可继续修改脚本,使之按指定时间间隔执行。

2 内存泄漏示例举例

这里以cJSON解析示例,cJSON_Parse会申请内存,生成json树,在使用完会,需要通过cJSON_Delete来释放内存。

2.1 存在内存泄漏的写法

这里test_parse_json是对json数据(从json文件读取,先保存在buf缓存中)进行解析和处理,期望解析得到的json树在外部释放。

这里的问题是,cJSON *jRoot不应该使用一次指针,而应该使用二级指针。

简单分析:

  • 参数cJSON *jRoot虽然是指针,但按照参数按值传递的原则,是传入的外部cJSON *jRoot的NULL值(外部cJSON *jRoot是实参,其值NULL传给函数参数中的形参cJSON *jRoot
  • 内部的jRoot,实际是另一个副本,初始值就是传入的NULL,然后接受cJSON_Parse的赋值
  • test_parse_json退出后,外部的cJSON *jRoot实际未被修改,仍为NULL,所以未能释放内存,造成内存泄漏
// 错误示例voidtest_parse_json(char *buf, cJSON *jRoot){    jRoot = cJSON_Parse(buf);if (jRoot)    {        cJSON *json = NULL;if ((json = cJSON_GetObjectItem(jRoot, "version")))        {printf("[%s:%d] version:%d\n", __func__, __LINE__, json->valueint);        }char *data = cJSON_PrintUnformatted(jRoot);printf("[%s:%d] ok:%s\n", __func__, __LINE__, data);free(data);    }}//================== 使用示例cJSON *jRoot = NULL;test_parse_json(buf, jRoot);if (jRoot){    cJSON_Delete(jRoot); // 释放cJSON_Parse申请的内存printf("[%s:%d] [%d] cJSON_Delete\n", __func__, __LINE__, i);}else{printf("[%s:%d] [%d] err, null jRoot!\n", __func__, __LINE__, i);}

如果在cJSON_Delete时,没有对jRoot是NULL的错误打印,问题将被掩盖,因为json解析代码运行结果是正常的。

2.2 正确的写法

正确的做法是使用二级指针。

简单分析:

  • 参数cJSON **jRoot是二级指针,但按照参数按值传递的原则,是传入的外部cJSON *jRoot的地址(外部cJSON *jRoot是实参,其地址值传给函数参数中的形参cJSON **jRoot
  • 内部的jRoot,实际是另一个副本,初始值就是传入的外部cJSON *jRoot的地址,而*jRoot就是外部cJSON *jRoot所存储的值,然后接受cJSON_Parse的赋值,这里,外部的cJSON *jRoot就记录到了内部cJSON_Parse申请的内存地址
  • test_parse_json退出后,外部的cJSON *jRoot就可以释放内存

关于二级指针的介绍,具体可看之前的文章:用cJson的例子,来理解二级指针

// 正确示例voidtest_parse_json_2(char *buf, cJSON **jRoot){    *jRoot = cJSON_Parse(buf);if (*jRoot)    {        cJSON *json = NULL;if ((json = cJSON_GetObjectItem(*jRoot, "version")))        {printf("[%s:%d] version:%d\n", __func__, __LINE__, json->valueint);        }char *data = cJSON_PrintUnformatted(*jRoot);printf("[%s:%d] ok:%s\n", __func__, __LINE__, data);free(data);    }}//================== 使用示例cJSON *jRoot = NULL;test_parse_json_2(buf, &jRoot);if (jRoot){    cJSON_Delete(jRoot); // 释放cJSON_Parse申请的内存printf("[%s:%d] [%d] cJSON_Delete\n", __func__, __LINE__, i);}else{printf("[%s:%d] [%d] err, null jRoot!\n", __func__, __LINE__, i);}

2.3 完整示例代码

代码改编自之前的文章:使用cJosn读写配置文件

// gcc test5.c cjson/cJSON.c -o test5#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include"cjson/cJSON.h"#define CONFIG_FILE1 "config1.json"intread_json_file(constchar *filePath, char **buf, int *buf_len){       FILE *fp = fopen(filePath, "r");if (!fp)     {printf("fopen:%s failed\n", filePath);return-1;    }// 计算文件的大小    fseek(fp, 0, SEEK_END);    *buf_len = ftell(fp);    fseek(fp, 0, SEEK_SET);// 分配内存    *buf = malloc(*buf_len + 1);if (NULL == *buf)     {        fclose(fp);return-1;    }memset(*buf, 0, *buf_len + 1);  // 清空,防止脏数据// 读取内存    fread(*buf, 1, *buf_len, fp);    fclose(fp);    cJSON_Minify(*buf); // 删除注释+压缩printf("[%s:%d] buf_len:%d, buf:%s]\n", __func__, __LINE__, *buf_len, *buf);return0;}// 错误示例voidtest_parse_json(char *buf, cJSON *jRoot){    jRoot = cJSON_Parse(buf);if (jRoot)    {        cJSON *json = NULL;if ((json = cJSON_GetObjectItem(jRoot, "version")))        {printf("[%s:%d] version:%d\n", __func__, __LINE__, json->valueint);        }char *data = cJSON_PrintUnformatted(jRoot);printf("[%s:%d] ok:%s\n", __func__, __LINE__, data);free(data);    }}// 正确示例voidtest_parse_json_2(char *buf, cJSON **jRoot){    *jRoot = cJSON_Parse(buf);if (*jRoot)    {        cJSON *json = NULL;if ((json = cJSON_GetObjectItem(*jRoot, "version")))        {printf("[%s:%d] version:%d\n", __func__, __LINE__, json->valueint);        }char *data = cJSON_PrintUnformatted(*jRoot);printf("[%s:%d] ok:%s\n", __func__, __LINE__, data);free(data);    }}intmain(void){   char *buf = NULL;int buf_len = 0;    read_json_file(CONFIG_FILE1, &buf, &buf_len);printf("[%s:%d] buf_len:%d, buf:%s]\n", __func__, __LINE__, buf_len, buf);for (int i = 0; i < 5000; i++) // 多循环几次,效果更明显    {        cJSON *jRoot = NULL;#if 0// 错误示例        test_parse_json(buf, jRoot);#else// 正确示例        test_parse_json_2(buf, &jRoot);#endifif (jRoot)        {            cJSON_Delete(jRoot); // 释放cJSON_Parse申请的内存printf("[%s:%d] [%d] cJSON_Delete\n", __func__, __LINE__, i);        }else        {printf("[%s:%d] [%d] err, null jRoot!\n", __func__, __LINE__, i);        }    }// 释放内存free(buf);    buf = NULL;while(1)    {        sleep(1); // 程序先暂停在这里,便于观察内存使用情况    }return0;}

3 运行结果

运行没有内存泄漏的分支,可以看到在循环5000次后,无论是USS还是RSS,都只有几百K

运行有内存泄漏的分支,可以看到在循环5000次后,因为每次都没有释放json,最终USS是约5MB,RSS是约6MB,对比可见内存未释放

4 总结

本篇初步介绍了Linux进程内存监测的简单方案,包括查看status和smaps文件中相关内存数据记录,然后通过cJSON的实例,对比有无内存泄漏的情况下,通过查询该进程的USS和RSS的大小,确认内存泄漏的存在。

文章推荐

使用cJosn读写配置文件
用简单的例子,来理解C指针
用cJson的例子,来理解二级指针
图解AES密钥扩展与加密过程
嵌入式Linux中自己写的程序如何开机自启动?

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-04 03:11:40 HTTP/2.0 GET : https://f.mffb.com.cn/a/499586.html
  2. 运行时间 : 0.137471s [ 吞吐率:7.27req/s ] 内存消耗:4,994.62kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=a48a8df6d0e8d9e85cb74d4ac0df7813
  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.000542s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000754s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000350s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000295s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000555s ]
  6. SELECT * FROM `set` [ RunTime:0.000250s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000601s ]
  8. SELECT * FROM `article` WHERE `id` = 499586 LIMIT 1 [ RunTime:0.000706s ]
  9. UPDATE `article` SET `lasttime` = 1783105900 WHERE `id` = 499586 [ RunTime:0.007550s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000416s ]
  11. SELECT * FROM `article` WHERE `id` < 499586 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001812s ]
  12. SELECT * FROM `article` WHERE `id` > 499586 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000822s ]
  13. SELECT * FROM `article` WHERE `id` < 499586 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.007398s ]
  14. SELECT * FROM `article` WHERE `id` < 499586 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.035775s ]
  15. SELECT * FROM `article` WHERE `id` < 499586 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001434s ]
0.140191s