最近,有部分越南的服务器内存不断上涨,怀疑是内存泄漏,因为框架提供的内存报告里,C内存和Lua占用内存都不大,和ps里看的差好多。总内存在12G左右,C和Lua的加起来约4G,两者相差了8G

经过一番排查,排除了混用glibc malloc和jemalloc的可能。于是写了一个多线程的测试程序,由多个生产者-消费者线程对组成。生产者分配一个随机大小的内存(在SIZE范围内),然后memset将内存遍历一次,再将指针通过管道发给消费者。消费者拿到指针后,读一下指针的值,然后释放指针对应内存块。这个模型模拟了skynet的一个线程分配内存(消息),发给另一个线程消费(释放)的情况。在没有设置jemalloc的参数的情况下,这个例程的内存会逐渐涨到一个峰值,然后不再增大,但也不再减少。如果设定了例程里的ABORT_COUNT,过了指定次数后不再进行内存分配,内存过几个小时也不会下降,这跟线上的情况类似

通过MALLOC_CONF环境变量,设置了dirty_decay_ms:0,muzzy_decay_ms:0以后,内存的峰值变低了,观察top命令的RES内存,明显低了不少。将选项换成了background_thread:true,则例程即使不再分配内存,内存占用也会逐渐降低了。dirty_decay_ms表示内存块从dirty状态移动到muzzy状态的时间,muzzy_decay_ms是muzzy状态到释放给系统的时间。设为0以后行为会不一样,比如我两个参数都设置10000ms,并不是20秒后就会还给系统。。

往后打算设置一下background_thread:true,让内存不再使用时慢慢还给系统,避免OOM Killer找上门来杀进程

jemalloc内存占用问题的更多相关文章

  1. jemalloc内存分配器详解

    前言 C 中动态内存分配malloc 函数的背后实现有诸派:dlmalloc 之于 bionic:ptmalloc 之于 glibc:allocation zones 之于 mac os x/ios: ...

  2. Linux系统下输出某进程内存占用信息的c程序实现

    在实际工作中有时需要程序打印出某个进程的内存占用情况以作参考, 下面介绍一种通过Linux下的伪文件系统/proc 计算某进程内存占用的程序实现方法. 首先, 为什么会有所谓的 伪文件 呢. Linu ...

  3. Linux系统内存占用90%以上 ?

    问题: [root@dbserver01 zx_epp_db]# free -m total used free shared buffers cached Mem: 15953 14706 1246 ...

  4. android应用内存占用测试(每隔一秒打印procrank的信息)

    1.内存占用 对于智能手机而言,内存大小是固定的:因此,如果单个app的内存占用越小,手机上可以安装运行的app就越多:或者说app的内存占用越小,在手机上运行就会越流畅.所以说,内存占用的大小,也是 ...

  5. 怎样使java程序减少内存占用(转载)

    本文收集网上关于减少java程序占用的一些小知识点 (1)别用new Boolean(). 在很多场景中Boolean类型是必须的,比如JDBC中boolean类型的set与get都是通过Boolea ...

  6. C# 处理应用程序减少内存占用

    SetProcessWorkingSetSize减少内存占用 系统启动起来以后,内存占用越来越大,使用析构函数.GC.Collect什么的也不见效果,后来查了好久,找到了个办法,就是使用 SetPro ...

  7. rabbitmq binary/other_system内存占用很高

    最近有台服务器的MQ应用占用内存比较偏高,如下: 但是看控制台本身内存中消息积压并不多, 查看rabbtmqctl发现,binary data和other data占据了绝大部分的内存,如下: {me ...

  8. Java线上应用故障排查之二:高内存占用

    搞Java开发的,经常会碰到下面两种异常: 1.java.lang.OutOfMemoryError: PermGen space 2.java.lang.OutOfMemoryError: Java ...

  9. C# WinForm应用程序降低系统内存占用方法

    这里整理了一些网上关于Winform如何降低系统内存占用的资料,供参考: 1.使用性能测试工具dotTrace 3.0,它能够计算出你程序中那些代码占用内存较多2.强制垃圾回收3.创建完对象实例后,记 ...

随机推荐

  1. August 11th, 2019. Week 33rd, Sunday

    Worry does not empty tomorrow of its sorrow. It empties today of its strength. 忧虑不会消除明天的痛苦,它只会削弱今天的力 ...

  2. CALL和RET指令实验

    实验10 1.在屏幕8行3列,用绿色显示data段中的字符串 assume cs:code data segment db data ends code segment start: ;行 ;列 ;颜 ...

  3. jenkins 分布式配置+allure集成+邮件发送

    jenkins节点配置+allure集成+邮件发送这一套走下来感觉很麻烦,要配置的东西太多了,所以在此记录一下,防止以后忘了. 环境: 主机master:腾讯云服务器ubuntu18.04 执行机sl ...

  4. 六、SQL优化

    SQL优化 优化策略 一.尽量全值匹配 当建立了索引列后,尽量在where条件中使用所有的索引. CREATE TABLE `staffs`( id int primary key auto_incr ...

  5. 国产处理器的逆袭机会——RISC-V

    前言 今天天气阴沉,刚才又下起了小雨,温度骤降,前几天脱下的秋裤,今天又穿上了,这天气真是变化无常.上周六(4.20)参加了一场关于RSIC-V的技术沙龙,第一次真正了解了RISC-V架构,正好今天不 ...

  6. Python:有参装饰器与多个装饰器装饰一个函数

    有参装饰器 def timmerout(flag1): #flag1 =flag def timmer(f): def inner(*args,**kwargs): if flag1: start_t ...

  7. json对象中的变量存在空格的取值办法

    写一个json对象,但需求需要是带空格的键,定义的话很容易定义,只需要双引号引起来即可,但取值的时候怎么取,直接写 会报错,所以就有了下边的办法 <el-form-item label=&quo ...

  8. angluarjs实现过滤并替换关键字

    html样式 <body ng-app="myapp" ng-controller="myCtrl"> <input type="t ...

  9. nginx——keepalived

    nginx--keepalived 1.keepalived高可用基本概述 什么是高可用 一般是指2台机器启动着完全相同的业务系统,当有一台机器down机了,另外一台服务器就能快速的接管,对于访问的用 ...

  10. 一个版本烧录过程中记录:fdisk、mkfs.ext4、make_ext4fs、img2simg、simg2img

    关键词:dd.fdisk.mkfs.ext4.make_ext4fs.img2simg.simg2img等等. 一个典型的嵌入式系统是由uboot+kernel+rootfs组成的,其中uboot和k ...