关于64位操作系统,应用程序占用内存飙升的问题解决方法记录
2015-03-17 00:00
519 查看
最近在处理java程序OA的时候,发现服务器占用内存情况非常严重,非常恶劣
最后度娘,谷歌了一上午,终于发现了问题所在,在这里做个记录.
pmap -x $(pidof webname)
通过这种方式查看到的应用程序内存使用情况如下图所示
可以看出这里有许多的anon进程 原因是:
glibc为了分配内存的性能的问题,使用了很多叫做arena的memory pool,缺省配置在64bit下面是每一个arena为64M,一个进程可以最多有 cores * 8个arena。假设你的机器是4核的,那么最多可以有4 * 8 = 32个arena,也就是使用32 * 64 = 2048M内存。 当然你也可以通过设置环境变量来改变arena的数量.例如export MALLOC_ARENA_MAX=1
hadoop推荐把这个值设置为4。当然了,既然是多核的机器,而arena的引进是为了解决多线程内存分配竞争的问题,那么设置为cpu核的数量 估计也是一个不错的选择。设置这个值以后最好能对你的程序做一下压力测试,用以看看改变arena的数量是否会对程序的性能有影响。
mallopt(M_ARENA_MAX, xxx)如果你打算在程序代码中来设置这个东西,那么可以调用mallopt(M_ARENA_MAX, xxx)来实现,由于我们AuthServer采用了预分配的方式,在各个线程内并没有分配内存,所以不需要这种优化,在初始化的时候采用mallopt(M_ARENA_MAX, 1)将其关掉,设置为0,表示系统按CPU进行自动设置。
最后度娘,谷歌了一上午,终于发现了问题所在,在这里做个记录.
pmap -x $(pidof webname)
通过这种方式查看到的应用程序内存使用情况如下图所示
可以看出这里有许多的anon进程 原因是:
glibc为了分配内存的性能的问题,使用了很多叫做arena的memory pool,缺省配置在64bit下面是每一个arena为64M,一个进程可以最多有 cores * 8个arena。假设你的机器是4核的,那么最多可以有4 * 8 = 32个arena,也就是使用32 * 64 = 2048M内存。 当然你也可以通过设置环境变量来改变arena的数量.例如export MALLOC_ARENA_MAX=1
hadoop推荐把这个值设置为4。当然了,既然是多核的机器,而arena的引进是为了解决多线程内存分配竞争的问题,那么设置为cpu核的数量 估计也是一个不错的选择。设置这个值以后最好能对你的程序做一下压力测试,用以看看改变arena的数量是否会对程序的性能有影响。
mallopt(M_ARENA_MAX, xxx)如果你打算在程序代码中来设置这个东西,那么可以调用mallopt(M_ARENA_MAX, xxx)来实现,由于我们AuthServer采用了预分配的方式,在各个线程内并没有分配内存,所以不需要这种优化,在初始化的时候采用mallopt(M_ARENA_MAX, 1)将其关掉,设置为0,表示系统按CPU进行自动设置。
相关文章推荐
- 关于Android4.0 emulator-arm.exe-应用程序错误,内存不能为"read"问题解决方法
- 【转】关于Android4.0 emulator-arm.exe-应用程序错误,内存不能为"read"问题解决方法
- 关于Android4.0 emulator-arm.exe-应用程序错误,内存不能为"read"问题解决方法
- 【转】关于Android4.0 emulator-arm.exe-应用程序错误,内存不能为"read"问题解决方法
- 关于Android4.0 emulator-arm.exe-应用程序错误,内存不能为"read"问题解决方法
- 关于inodes占用100%的问题及解决方法续集如何解决clientmqueue目录文件太多 推荐
- CI框架在CLI下执行占用内存过大问题的解决方法
- MSSQL数据库占用内存过大造成服务器死机问题的解决方法
- 解决重装VC++所遇到问题的方法(关于“内存不能read”)
- CI框架在CLI下执行占用内存过大问题的解决方法
- 解决firefox火狐浏览器占用内存大、启动慢问题的方法
- C# Winform应用程序占用内存较大解决方法整理
- 解决Apache长时间占用内存大的问题,Apache 内存优化方法
- w3wp.exe占用CPU和内存问题过高的解决方法
- 关于RUNDLL32.exe占用大量CPU的问题以及解决方法
- 关于inodes占用100%的问题及解决方法 推荐
- 关于android系统内存占用超过80%的解决方法!有问题先百度~吼吼
- 关于IE中出现的内存不能为written问题的解决方法
- 解决windows server2003 64位操作系统上不能加载32位应用程序dll 的问题
- C# Winform应用程序占用内存较大解决方法整理