最近,有部分越南的服务器内存不断上涨,怀疑是内存泄漏,因为框架提供的内存报告里,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. PC端视频播放器

    视频播放器:Potplayer 它是一款纯净的.无广告.极速

  2. IT兄弟连 HTML5教程 设置IE9以下版本浏览器支持HTML5

    HTML2.HTML5刚发布时由于各浏览器之间的标准不统一,开发者的时间都浪费在解决Web浏览器之间的兼容性上.但由于W3C和WHATWG对HTML5新版本的制定,以及近年来对HTML5的使用,再加上 ...

  3. 【Unity游戏开发】性能优化之在真机上开启DeepProfile与踩坑

    一.引子 最近马三入职了新公司,平时除了负责编辑器开发之外还要做一些游戏性能优化方面的工作.在这里首先给大家安利一下Unity官方的性能测试分析工具URP ,这个工具目前是免费,测试的过程中也不需要接 ...

  4. Electron桌面项目-解决throw new Error('Electron failed to install correctly, please delete node_modules..

    前言 Electron 是一个用 HTML,CSS 和 JavaScript 来构建跨平台桌面应用程序的一个开源库.由GitHub开发的. 其原理是 Electron 通过将 Chromium 和 N ...

  5. 解决RubyMine中puts中文显示乱码的问题

    一个简单的ruby代码,puts一个中文,显示乱码 # -*- coding: utf-8 -*- puts "你好" require_relative 'calc.rb' # r ...

  6. go语言之map

    go语言的map就相当于python的dict 1.map的初始化 //创建map //k的类型是int,v的类型是string var test25_1 map[int]string fmt.Pri ...

  7. ASP.NET Repeater与Button 以及viewState 和 hyperLink

    例如Repeater重复项 我们要在一个表里作删除以及修改 我们可以在Repeater中添加button控件前台代码:button有属性commandName 以及commandArgument 我们 ...

  8. Jedis & spring-data-redis

    当我们了解了redis的五大数据类型,手动去敲一敲每个数据类型对应的命令,无论是再来看jedis,还是spring-data-redis都是很轻松的,他们提供的API都是基于原生的redis命令,可读 ...

  9. linux查看占用端口号的程序及pid

    netstat -tunlp|grep 端口号 圈出来的就是pid

  10. Redis报错:ERR This instance has cluster support disabled

    异常分析从报错误的信息ERR This instance has cluster support disabled很明显看得出来,是没有启动redis集群功能,可是我项目配置的集群的配置方式,要么修改 ...