关于glibc:实战总结|记一次-glibc-导致的堆外内存泄露

问题景象团队外围利用每次公布完之后,内存会逐渐占用,不重启或者重新部署就会导致整体内存占用率超过90%。 $$公布2天后的内存占用趋势$$ 摸索起因一堆内找到起因呈现这种问题,第一想到的就是集群中随便找一台机器,信手dump一下内存,看看是否有堆内存使用率过高的状况。 $$内存泄露$$ $$泄露对象占比$$ 发现 占比18.8% 问题解决是common-division这个包引入的 暂时性修复计划 以后加载俄罗斯(RU)国内地址库,改为一个小国家地址库 以色列(IL)以后业务应用场景在补发场景下会应用,增加打点日志,确保是否还有业务在应用该服务,没人在用的话,间接下掉(后发现,确还有业务在用呢 )。完满解决问题,要的就是速度!!公布 ~~上线!!顺道记录下同一台机器的前后比照。 公布后短时间内有个内存增长实属失常,后续在做察看。公布第二天,棘手又dump一下同一台机器的内存 由原来的18.8%到4.07%的占比,升高了14%,牛皮!! 傻了眼,内存又飙升到86%~~ 该死的迷之自信!! $$公布后内存使用率$$ 摸索起因二没方法汇报了~~~然而问题还是要去看看为什么会占用这么大的内存空间的~ 查看过程内存应用 java 过程内存使用率 84.9%,RES 6.8G。查看堆内应用状况当期机器配置为 4Core 8G,堆最大5G,堆应用为有余3G左右。 应用arthas的dashboard/memory 命令查看以后内存应用状况: 以后堆内+非堆内存加起来,远有余以后RES的使用量。那么是什么中央在占用内存?? 开始初步狐疑是『堆外内存泄露』开启NMT查看内存应用笔者是预发环境,正式环境开启需谨慎,本性能有5%-10%的性能损失!!!-XX:NativeMemoryTracking=detailjcmd pid VM.native_memory 如图有很多内存是Unknown(因为是预发开启,绝对占比仍是很高)。 概念NMT displays “committed” memory, not "resident" (which you get through the ps command). In other words, a memory page can be committed without considering as a resident (until it directly accessed).rssAnalyzer 内存剖析笔者没有应用,因为本性能与NMT作用相似,临时没有截图了~rssAnalyzer(外部工具),能够通过oss在预发/线上下载。通过NMT查看内存应用,根本确认是堆外内存泄露。剩下的剖析过程就是确认是否堆外泄露,哪里在泄露。 堆外内存剖析查了一堆文档基本思路就是 ...

August 24, 2023 · 2 min · jiezi

关于glibc:CentOS-69-升级-glibc-212-到-217qbit

前言以后日期是 2022.7.6,CentOS 6 进行保护更新日期是 2020.11.30,CentOS 6 已进行保护近两年因为种种原因,qbit 须要在 CentOS 6.9 上通过 Miniconda 装置 Python 3.8,发现 glibc 版本太旧装不上,于是试验降级了glibc初始环境 CentOS 6.9 x86_64glibc 2.12步骤间接装置 MiniConda3 报错 $ sh Miniconda3-py38_4.12.0-Linux-x86_64.sh WARNING: The installer is not compatible with the version of the Linux distribution installed on your system. The version of GLIBC is no longer supported. Found version 2.12, which is less than 2.17Aborting installation.查看以后 glibc 版本 $ ldd --versionldd (GNU libc) 2.12Copyright (C) 2010 Free Software Foundation, Inc.This is free software; see the source for copying conditions. There is NOwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.由 Roland McGrath 和 Ulrich Drepper 编写。切换软件仓库(centos-vault源) ...

July 6, 2022 · 1 min · jiezi

关于glibc:业内同行盆友来稿对libcso下毒手引发的惨痛血案围观大型翻车现场

写在开篇为了在线上装置环境依赖,给glibc库降级,因为线上环境libc.so版本低,不反对装置,所以手贱把动静库中的libc.so.6给移走了,间接导致Linux零碎解体,零碎瘫痪,所有用户均被强制退出。意识到短少对libc.so的意识,认为跟一般的lib包相似,间接把新版的so软连过来就能够满足装置和降级,当初哦豁....... 软链不软链曾经不重要了,反正腿是软趴趴的。1、什么是libc.solibc.so.6 是很根底的库(glibc),是软连贯到在Linux零碎中根本的命令,有很多可执行文件都会依赖这个共享库。当不小心把这个库改名字或者移走了,都会导致不同水平的异样,能够借助LD_PRELOAD变量和"ldconfig"命令来复原这个共享库。前提是终端没有断开的状况下操作。libc.so.6是一个相似于WINDOWS下的一个快捷指向型的文件,而 linux有两种库,别离为:glibc、libc阐明libc 是Linux下的ANSI C 函数库;glibc 是Linux下的GUN C 函数库:2、操作流程作零碎版本是:Red Hat Enterprise Linux Server release 6.81、问题呈现因为笔者这里是间接在生产环境上操作,过后是做软连贯没胜利,报错:文件已存在,软连贯失败。于是咱们就想着把它给移走。还没来得及做新软链就间接导致报错。基本上非系统命令都有这一条 libc.so.6 => /lib64/libc.so.6 ,因而libc.so.6至关重要,相对不能删,不能改名,不能移走,能不能笼罩就不晓得了,想作死的能够试试 [root@IDC-Redhat 6.8]# ln -s /home/david/libc-2.17.so /lib64/libc.so.6ln: creating symbolic link `/lib64/libc.so.6': File exists[root@IDC-Redhat 6.8]# mv /lib64/libc.so.6 .who: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directoryawk: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directorydate: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory[root@IDC-Redhat 6.8]# 过后就吓尿了,生产环境被我玩坏了,怎么破。起初查起因才晓得很多命令都依赖glibc,我把它的软链接移走了零碎找不到此库,那必定玩完。留神:呈现这样的状况只有不关机重启,就不会影响业务运行,不够肯定要留神磁盘的应用状况。终端输出用户名后回车ENTER,间接提醒以下报错,无奈登录。 ...

June 20, 2022 · 2 min · jiezi

关于glibc:centos65-安装-glibc214遇到的问题

1、配置装置门路../configure --prefix=/usr/local/glibc-2.14时报错 checking for gcc... nochecking for cc... nochecking for cl.exe... noconfigure: error: in `/home/shenpeipei/glibc-2.14/build':configure: error: no acceptable C compiler found in $PATH-----起因:没有c编译器-----解决办法:装置gcc yum install gcc2、编辑装置make && make install时出错 Can't open configuration file/opt/glibc-2.14/etc/ld.so.conf: No such file or directory-----解决办法: touch usr/local/glibc-2.14/etc/ld.so.conf或者find / -name "ld.so.conf"能够发现/etc/ld.so.conf这个文件,而后复制过去就能够了cp /etc/ld.so.conf /usr/local/glibc-2.14/etc/3、删除libc.so.6后ln、ls等命令都不可用-----解决办法: export LD_PRELOAD=/lib64/libc-2.12.so 执行完ln -s /lib64/libc-2.14.so libc.so.6后再改为LD_PRELOAD=/lib64/libc-2.14.so 或者间接export LD_PRELOAD=/lib64/libc-2.14.so再执行ln -s /lib64/libc-2.14.so libc.so.64、装置完glibc-2.14后发现locale会有问题-----景象一:断开从新登录会有warning -bash: warning: setlocale: LC_CTYPE: cannot change locale (en_US.UTF-8): No such file or directory-bash: warning: setlocale: LC_COLLATE: cannot change locale (en_US.UTF-8): No such file or directory-bash: warning: setlocale: LC_MESSAGES: cannot change locale (en_US.UTF-8): No such file or directory-bash: warning: setlocale: LC_NUMERIC: cannot change locale (en_US.UTF-8): No such file or directory-bash: warning: setlocale: LC_TIME: cannot change locale (en_US.UTF-8): No such file or directory-----景象二:输出locale,会有报错 ...

December 17, 2020 · 1 min · jiezi