线上机器跑了一个 Python 的多线程的程序,运行了 2 天,发现貌似有内存泄漏的情况
htop 查了下真实内存使用达到 1G 左右(机器总共是 2G 内存)
但是 htop 上面查看 Python 程序本身只占了不到 10%的内存,整个机器上只有这一个 Python 程序
请问大家,这是 Python 程序的 内存泄漏 还是 句柄泄漏 了?
有没有什么好的办法来排查嘛? 我用了下检测工具查看 Python 程序自身是 dict 对象占用了最多的内存
MrGba2z
2018-10-11 01:32:09 +08:00
你实际用的内存主要是看 RSS
如果你对性能要求很高 可以假装..无视如此庞大的 VSIZE(减少线程数也能降低)
MALLOC_ARENA_MAX 调小之后 会增大 memory congestion 的几率, tcmalloc 等能视觉上降低 VSIZE 也只是算法做了优化, 使用了更效率的 lock/unlock 机制.
默认 glibc 在线程初始化的时候会固定分配一块大约 100M 的内存, 但因为他没被使用 所以它只是 VSIZE
如果你有 20 个线程 每个实际用 1M 的内存
那么结果(使用 glibc 的默认设置)就是 20M 的 RSS 2G 的 VSIZE
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/496498
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.