九维我操你爹
帮 BentoML 和 @frostming 查社区一个内存泄漏的问题
https://github.com/bentoml/BentoML/issues/4760
基本上可以确定是 glibc malloc 的老问题。我懒得写更详细的 trace 脚本了,就直接聊聊这个经典的 Python 问题吧
这个问题的核心是 glibc malloc 的 free 不会直接将内存归还给系统,而是会试图 Merge 成一个 big chunk 归还,但是这里存在一个问题,如果分配的内存过于碎片化导致无法 merge 成一个连续的 big chunk ,那么内存虽然被 free 了但是依旧没有归还给系统。这就是内存泄漏
Python 自己封装了一套内存分配器来试图解决问题。解决方式是直接调用 munmap 来强制归还,FYI https://github.com/python/cpython/blob/main/Objects/obmalloc.c#L380-L395
而且 CPython 提供了自己封装的 allocator 接口给扩展用
但是问题在这,扩展不一定会用,也有很大概率是 malloc/free 直接调用,那么又回到了最开始的情况
解决方案常见的三种
1. let it crash,上 memory limit,挂了重拉(什么 cloud native
2. ctype binding glibc ,然后 malloc_trim 定时调用
3. 换用 tcmalloc 或者 jemalloc(我自己常用 tcmalloc (LD_PRELOAD 直接换
其余社区的一些反馈 https://github.com/protocolbuffers/protobuf/issues/10088#issuecomment-1587627538
https://github.com/bentoml/BentoML/issues/4760
基本上可以确定是 glibc malloc 的老问题。我懒得写更详细的 trace 脚本了,就直接聊聊这个经典的 Python 问题吧
这个问题的核心是 glibc malloc 的 free 不会直接将内存归还给系统,而是会试图 Merge 成一个 big chunk 归还,但是这里存在一个问题,如果分配的内存过于碎片化导致无法 merge 成一个连续的 big chunk ,那么内存虽然被 free 了但是依旧没有归还给系统。这就是内存泄漏
Python 自己封装了一套内存分配器来试图解决问题。解决方式是直接调用 munmap 来强制归还,FYI https://github.com/python/cpython/blob/main/Objects/obmalloc.c#L380-L395
而且 CPython 提供了自己封装的 allocator 接口给扩展用
但是问题在这,扩展不一定会用,也有很大概率是 malloc/free 直接调用,那么又回到了最开始的情况
解决方案常见的三种
1. let it crash,上 memory limit,挂了重拉(什么 cloud native
2. ctype binding glibc ,然后 malloc_trim 定时调用
3. 换用 tcmalloc 或者 jemalloc(我自己常用 tcmalloc (LD_PRELOAD 直接换
其余社区的一些反馈 https://github.com/protocolbuffers/protobuf/issues/10088#issuecomment-1587627538
在某次治療的過程中,孩童藉由遊戲,傳達出事件對於他們小小世界的影響:
她會有一個家,然後家又會破碎,甚至會有一個很溫和的小白兔進到家裡,最後小白兔變成壞人,她把小白兔丟掉,說著,我以為你是好人,原來你是壞人。
【东京歌舞伎町拉面店发生火灾:就算地球爆炸了我也要把拉面吃完!最烧的一集(中日双语)(24/05/28)-哔哩哔哩】 https://www.bilibili.com/video/av1705144099?p=2
敬意を払おう
敬意を払おう
这个问题其实挺有意思的,遇到一个没有想到的问题
COPY --from=A /home/b/ /home/b/
加上 --link --chown=b:b 以后遇到了上面的问题。解决方法是在一个单独的 stage 里 chown
修完以后发现虽然能运行但会因为没有权限在 /home/b/ 下写文件导致退出
一查 /home/b/ 的 owner 居然变成了 root:root …
一开始还以为是我 chown 的姿势不对,换了好几种姿势,又不断在中途 debug,终于确定这个问题是 COPY --link 造成的
原本 /home/b/ 目录本身和其下的所有子文件/目录的 owner 都是 b:b,但是在 COPY --link 后 /home/b/ 本身的 owner 变成了 root:root
很难想到 COPY 加不加 --link 还会有这样的行为差异。权作记录
COPY --from=A /home/b/ /home/b/
加上 --link --chown=b:b 以后遇到了上面的问题。解决方法是在一个单独的 stage 里 chown
修完以后发现虽然能运行但会因为没有权限在 /home/b/ 下写文件导致退出
一查 /home/b/ 的 owner 居然变成了 root:root …
一开始还以为是我 chown 的姿势不对,换了好几种姿势,又不断在中途 debug,终于确定这个问题是 COPY --link 造成的
原本 /home/b/ 目录本身和其下的所有子文件/目录的 owner 都是 b:b,但是在 COPY --link 后 /home/b/ 本身的 owner 变成了 root:root
很难想到 COPY 加不加 --link 还会有这样的行为差异。权作记录
https://news.tv-asahi.co.jp/news_economy/articles/000351724.html
#TIL
しろもの‐かでん【白物家電】
《普及し始めた当初は白い塗装が多かったことから》冷蔵庫・洗濯機・乾燥機・炊飯器などの、家庭用電気機器。白物。
くろもの‐かでん【黒物家電】
《黒い塗装が多いことから》テレビ・レコーダー・カメラなど、娯楽に関する家庭用電気機器。白物家電に対してできた語。黒物。
#TIL
しろもの‐かでん【白物家電】
《普及し始めた当初は白い塗装が多かったことから》冷蔵庫・洗濯機・乾燥機・炊飯器などの、家庭用電気機器。白物。
くろもの‐かでん【黒物家電】
《黒い塗装が多いことから》テレビ・レコーダー・カメラなど、娯楽に関する家庭用電気機器。白物家電に対してできた語。黒物。