问题描述:
一台服务器运行着3个tomcat,服务器内存为128G,有一天发现内存使用95%了,
网上搜索了下,说是通过设置环境变量来改变arena的数量,例如export MALLOC_ARENA_MAX=1 内容写的比较复杂,可能是glibc为了分配内存的性能的问题,也可能是JDK版本的问题,如下:
http://blog.csdn.net/chen19870707/article/details/43202679
http://blog.2baxb.me/archives/918
0
[root@server05 tomcat1]# free -m
total used free shared buffers cached
Mem: 129007 125052 3955 0 255 4008
-/+ buffers/cache: 120788 8219
[root@server05 tomcat1]# echo 3 > /proc/sys/vm/drop_caches
[root@server05 ~]# free -g //发现缓存明显减少了
total used free shared buffers cached
Mem: 125 4 121 0 0 0
-/+ buffers/cache: 4 121
Swap: 7 0 7
释放后在修改回去echo 0 > /proc/sys/vm/drop_caches,启动tomcat业务,正常了。
参考:
drop_caches
Writing to this will cause thekernel to drop clean caches, dentries and
inodes from memory, causing thatmemory to become free.
To free pagecache:
echo1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
echo2 > /proc/sys/vm/drop_caches
To free pagecache, dentries andinodes:
echo3 > /proc/sys/vm/drop_caches
As this is a non-destructiveoperation and dirty objects are not freeable, the
user should run `sync' first.
http://www.kernel.org/doc/Documentation/sysctl/vm.txt
默认是0,1表示清空页缓存,2表示清空inode和目录树缓存,3清空所有的缓存
一台服务器运行着3个tomcat,服务器内存为128G,有一天发现内存使用95%了,
网上搜索了下,说是通过设置环境变量来改变arena的数量,例如export MALLOC_ARENA_MAX=1 内容写的比较复杂,可能是glibc为了分配内存的性能的问题,也可能是JDK版本的问题,如下:
http://blog.csdn.net/chen19870707/article/details/43202679
http://blog.2baxb.me/archives/918
继续查看问题,手动停止了tomcat业务,但是内存还是不能释放,想到直接释放下内存缓存,的确很有效,如下:
[root@server05 tomcat1]# cat /proc/sys/vm/drop_caches0
[root@server05 tomcat1]# free -m
total used free shared buffers cached
Mem: 129007 125052 3955 0 255 4008
-/+ buffers/cache: 120788 8219
Swap: 7999 0 7999
[root@server05 tomcat1]# sync 注意:在清空缓存之前使用sync命令同步数据到磁盘[root@server05 tomcat1]# echo 3 > /proc/sys/vm/drop_caches
[root@server05 ~]# free -g //发现缓存明显减少了
total used free shared buffers cached
Mem: 125 4 121 0 0 0
-/+ buffers/cache: 4 121
Swap: 7 0 7
释放后在修改回去echo 0 > /proc/sys/vm/drop_caches,启动tomcat业务,正常了。
参考:
drop_caches
Writing to this will cause thekernel to drop clean caches, dentries and
inodes from memory, causing thatmemory to become free.
To free pagecache:
echo1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
echo2 > /proc/sys/vm/drop_caches
To free pagecache, dentries andinodes:
echo3 > /proc/sys/vm/drop_caches
As this is a non-destructiveoperation and dirty objects are not freeable, the
user should run `sync' first.
http://www.kernel.org/doc/Documentation/sysctl/vm.txt
默认是0,1表示清空页缓存,2表示清空inode和目录树缓存,3清空所有的缓存