标签: 内存 - 文章列表
共 1 页 · 清除标签筛选
-
Go程序CPU占用过高与内存持续上涨的pprof定位方法(火焰图、heap profile与goroutine泄漏排查)
Go服务CPU爬到80%以上或者内存一天涨几百MB下不来时,top只能看到进程号。这篇记录用Go自带的pprof定位到具体函数:端点怎么挂才不暴露公网、top与top -cum的flat和cumulative差别、heap的inuse_space与alloc_space两个视角、用-base做差找泄漏点、goroutine的debug=1与debug=2读法、block与mutex的采样开关,以及Go 1.25、1.26、1.27里新增的相关能力。数据截至2026年10月。
-
Python进程内存持续上涨的排查方法(tracemalloc定位分配点、objgraph看对象引用与RSS口径差异)
Python服务RSS持续上涨直到被OOMKiller杀掉(退出码137),排查要先分清RSS、PSS、USS三个口径,再用MALLOC_ARENA_MAX与sys._debugmallocstats排除pymalloc碎片造成的假泄漏,然后用PYTHONTRACEMALLOC=25配合两次快照做差定位分配点,objgraph的show_growth与show_backrefs查引用链,最后落到logging重复addHandler、lru_cache无maxsize等常见泄漏点。附cgroup v2限额读法。
-
C++程序崩溃报0xC0000005访问冲突的定位方法(dump文件抓取、Windbg与AddressSanitizer排查内存越界)
0xc0000005是访问违例,与0xc0000409栈溢出、0xc0000374堆损坏不是一回事。先用注册表LocalDumps的DumpType设为2让系统落完整转储,或者procdump挂在外面等;编译时带/Zi与/DEBUG保留PDB,再用Windbg的!analyze -v、.ecxr与kv读栈。Debug构建靠_CrtSetDbgFlag与/RTC1提前拦,必要时上/fsanitize=address或者gflags整页堆。
-
Node.js报错JavaScript heap out of memory的排查方法(--max-old-space-size调整堆上限、堆快照抓取与内存泄漏定位)
先区分V8堆溢出与被系统OOM杀掉:前者该抬堆上限,后者要往下压。含node -e读heap_size_limit、NODE_OPTIONS与pm2的node_args写法、process.memoryUsage五个字段的读法、--heapsnapshot-signal抓三张快照做对比,以及全局缓存、事件监听重复注册这几个高频泄漏点。
-
Redis大key与热key的排查与解决方法(redis-cli --bigkeys、--memkeys与--hotkeys定位、UNLINK删除与拆分打散)
Redis内存莫名上涨、接口延迟抖动、主从同步变慢,多半是大key或热key在作怪。记录redis-cli --bigkeys、--memkeys、--hotkeys三个扫描器的用法与版本要求,MEMORY USAGE与OBJECT ENCODING确认单个key体量,SLOWLOG与LATENCY DOCTOR佐证,以及UNLINK异步删除、lazyfree配置、大key拆分与热key打散的具体做法。
-
PHP报错Allowed memory size of 134217728 bytes exhausted的解决方法(memory_limit调整、memory_get_usage定位与内存泄漏排查)
PHP报Allowed memory size of 134217728 bytes exhausted时,括号里的tried to allocate不是已用内存,报错行号也不一定是真凶。这篇从php.ini与FPM pool配置的区别讲起,给出php_admin_value、.user.ini、ini_set、php -d四种改法的生效范围与各自的坑,再用memory_get_usage打点定位大文件一次性读取、fetchAll、GD大图这类写法,并给出memory_limit取值与pm.max_children、容器内存的换算思路。
-
Java报错java.lang.OutOfMemoryError: Java heap space的排查方法(jmap与jcmd导出堆快照、MAT定位泄漏点与-Xmx调整)
Java heap space只说明堆分配不下了,谁占着堆要看堆快照。用-XX:+HeapDumpOnOutOfMemoryError留现场,jcmd与jstat判断是泄漏还是-Xmx给小了,再用MAT的Dominator Tree追引用链,顺带说清容器里UseContainerSupport与OOMKilled的关系。
-
Docker容器退出码137与OOMKilled的排查方法(docker inspect定位、内存限额调整与JVM容器感知)
容器跑着跑着自己就没了,docker ps -a里显示Exited (137),应用日志毫无异常。137等于128加9,是进程被SIGKILL杀掉的信号。本文讲如何用docker inspect确认OOMKilled、翻dmesg内核记录、读cgroup v2的memory.events拿到真实用量,以及不同退出码139、143的区别。
-
PHP-FPM日志报server reached pm.max_children setting的排查与解决方法(pm.max_children计算与slowlog定位慢请求)
nginx日志刷connect() to unix:/run/php/php8.2-fpm.sock failed (11: Resource temporarily unavailable),php-fpm日志报server reached pm.max_children setting,多半是worker被占满。给出fpm-status状态页、按内存算pm.max_children的公式、pool配置示例、slowlog抓慢请求,以及OOM与listen.backlog的排查。
-
Redis报错MISCONF Redis is configured to save RDB snapshots的解决方法(stop-writes-on-bgsave-error、fork失败与目录权限排查)
Redis写入报MISCONF Redis is configured to save RDB snapshots,读正常写被拒,根因是上一次bgsave失败被Redis记住。按排查顺序给出info persistence确认状态、journalctl查真实报错、目录属主与systemd ProtectSystem、vm.overcommit_memory导致fork失败、容器/data挂载与SELinux上下文处理,以及config set止血后如何固化配置。