游戏服务器内存占用动态调整

简介: 游戏服务器内存占用动态调整

最近游戏在腾讯平台上线,已经快破200组,以前是一台机器可能就放一两组游戏区内存绰绰有余,只要没发生内存泄漏,也就没去关心。

但现在为了节约成本,我们会尽量一台虚拟机上放尽量多的游戏区。所以我们默认放了4个区(每个区占用6G,共24G),还有放了logger 服,gate,flash,redis等应用,

发现只要服务器维护后快一星期左右,内存占用从原先的10几个G一路高歌猛进,直到占满内存 95%+,经常性收到监控邮件,内存又不足了,甚至引发OOM killer。

为什么人数这么少了,内存占用还是会达到6G+,垃圾回收怎么没任何作用?

原因是因为即使JVM 从系统中申请来内存后,就不会再归还给系统,向系统交还内存和申请内存都是比较耗时的,或者说,JVM和操作系统之间的通信是比较昂贵的,从另外一个角度来看, 如果JVM一有空闲内存就交给操作系统的话,那必然会存在内存紧张,需要频繁的向操作系统申请内存,现有的做法都是向操作系统申请一大块内存,自己管理,从而避免了频繁的操作系统调用,并且能使用适合自身应用场景,特殊的内存管理方式来提高性能。

所以被JVM GC掉和内存返回给操作系统是两码事,被GC掉只是不占用java heap的空间,JVM会保留该空间给后续对象分配,不会返回给系统,即使是C语言也是这样,malloc分配空间后直接free,空间也不会返回,因为应用有很大的可能继续要求分配空间,绝大部分的实现会保留free 后的内存空间。

如果真想回收给系统也是做到的,JVM有个参数决定空闲堆内存大于一定百分比时才会把内存交还给操作系统,慎用!

想想原因也很简单,如1台24G内存的CVM,每个区我们一开始会分配6G的JVM堆栈空间(xmn,xmx=6g), 懂的人知道,这个JVM一直跑着,会消耗掉6G+的内存占用。但游戏到了第二天后其实也就单区200~300左右在线,完全没必要分配这么多的内存,3G已然足够,但我们又不可能去停机维护修改堆内存占用。所以我们可以在每次维护的时候调整内存占用,于是我给出了个3/8公式,聪明的运维同学帮忙做了脚本实现:

当然了,我们还可以对平均在线,最高在线分配不同的权重去获取应该分配的内存,

这样,内存占用高的问题就基本解决了,资源成本省下了许多。

2015/12/11 楼上做的和说的有两点不同意。第一,根据观察下来,如果xms=6G xmx=6G,实际上JVM并不是一开始就把6G申请进内存,也是渐渐的申请进来,直到6G(所以一般都建议-Xms,-Xmx值一样大,一种说法是为了避免要用到时才临时从系统中申请内存,另一种说法是 避免在每次GC 后调整堆的大小(这个还存在疑问,感觉总堆内存只会增大不会变小),这个说法本来就是不对的,不知道有多少人被欺骗了),

第二点,每次维护的时候做内存配置调整时间上太不灵活,其实1天后就可以做调整,但又要保证JVM不重启,所以我们最好把释放内存放在JVM运行态,Ali JVM就做到了这一点,在FULLGC 的时候做内存释放。

坤谷给我的回复如下:

jvm最初只是和linux要连续6g地址空间,发生写入,产生缺页中断,linux才真的分物理内存。阿里jvm不用的页,jvm是通过madvice告诉Linux,这些页可以考虑回收。linux在自己方便的时候回收。linux下就是用到才分配内存,其他操作系统不熟悉。

 

目录
相关文章
|
17天前
|
存储 弹性计算 安全
阿里云服务器实例选择:经济型、通用算力型、计算型、通用型、内存型实例选择参考
当我们通过阿里云的活动购买云服务器会发现,相同配置的云服务器往往有多个不同的实例可选,而且价格差别也比较大,例如同样是4核8G的配置的云服务器,经济型e实例活动价格1595.11元/1年起,通用算力型u1实例要955.58元/1年起,而计算型c8i实例则要2845.81元/1年起,价格差别还是比较大的,因此,阿里云经济型、通用算力型、计算型、通用型、内存型实例云服务器有何差别就是很多新手用户比较关心的问题了,下面小编来为大家简单介绍下它们之间的区别。
|
14天前
|
存储 缓存 安全
阿里云服务器计算型c7/c8y/c8i,通用型g7/g8y/g8i,内存型r7/r8y/r8i区别及选择参考
为了满足不同企业级用户的多样化需求,阿里云在当下的活动中推出了多款计算型、通用型和内存型的云服务器实例,包括计算型c7/c8y/c8i、通用型g7/g8y/g8i以及内存型r7/r8y/r8i等。这些实例各具特色,适用于不同的应用场景和业务需求。本文将为您详细解析这些实例的区别,以及选择参考,帮助您根据自己的需求选择合适的阿里云服务器实例。
|
21天前
|
人工智能 运维 监控
2025年阿里云服务器配置选择全攻略:CPU、内存、带宽与系统盘详解
在2025年,阿里云服务器以高性能、灵活扩展和稳定服务助力数字化转型,提供轻量应用服务器、通用型g8i实例等多样化配置,满足个人博客至企业级业务需求。针对不同场景(如计算密集型、内存密集型),推荐相应实例类型与带宽规划,强调成本优化策略,包括包年包月节省成本、ESSD云盘选择及地域部署建议。文中还提及安全设置、监控备份的重要性,并指出未来可关注第九代实例g9i支持的新技术。整体而言,阿里云致力于帮助用户实现性能与成本的最优平衡。 以上简介共计238个字符。
|
3月前
|
存储 缓存 资源调度
阿里云服务器经济型、通用算力型、计算型、通用型、内存型实例区别与选择指南
在我们通过阿里云的活动选购云服务器的时候会发现,相同配置的云服务器往往有多个不同的实例可选,而且价格差别也比较大,这会是因为不同实例规格的由于采用的处理器不同,底层架构也有所不同(例如X86 计算架构与Arm 计算架构),因此不同实例的云服务器其性能与适用场景是有所不同。本文将详细解析阿里云的经济型、通用算力型、计算型、通用型和内存型实例的性能特点及适用场景,帮助用户根据自己的业务需求做出明智的选择。
|
3月前
|
存储 分布式计算 安全
阿里云服务器经济型e、通用算力型u1、计算型c8i、通用型g8i、内存型r8i实例介绍与选择参考
在阿里云现在的活动中,可选的云服务器实例规格主要有经济型e、通用算力型u1、计算型c8i、通用型g8i、内存型r8i实例,虽然阿里云在活动中提供了多种不同规格的云服务器实例,以满足不同用户和应用场景的需求。但是有的用户并不清楚他们的性能如何,应该如何选择。本文将详细介绍阿里云服务器中的经济型e、通用算力型u1、计算型c8i、通用型g8i、内存型r8i实例的性能、适用场景及选择参考,帮助用户根据自身需求做出合适的选择。
|
3月前
|
开发框架 .NET PHP
网站应用项目如何选择阿里云服务器实例规格+内存+CPU+带宽+操作系统等配置
对于使用阿里云服务器的搭建网站的用户来说,面对众多可选的实例规格和配置选项,我们应该如何做出最佳选择,以最大化业务效益并控制成本,成为大家比较关注的问题,如果实例、内存、CPU、带宽等配置选择不合适,可能会影响到自己业务在云服务器上的计算性能及后期运营状况,本文将详细解析企业在搭建网站应用项目时选购阿里云服务器应考虑的一些因素,以供参考。
|
4月前
|
缓存 Ubuntu Linux
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
155 4
|
4月前
|
存储 缓存 安全
阿里云服务器内存型r7、r8a、r8y、r8i实例区别及选择参考
随着阿里云2024年金秋云创季的开始,目前在阿里云的活动中,属于内存型实例规格的云服务器有内存型r7、内存型r8a、内存型r8y和内存型r8i这几个实例规格,相比于活动内的经济型e和通用算力型u1等实例规格来说,这些实例规格等性能更强,虽然这几个实例规格的云服务器通常处理器与内存的配比为都是1:8,但是他们在处理器、存储、网络、安全等方面等性能并不是一样的,所以他们的适用场景也有着不同。本文为大家介绍内存型r7、r8a、r8y、r8i实例的性能、适用场景的区别以及选择参考。
|
4月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
1609 2
|
4月前
|
弹性计算
阿里云2核16G云服务器多少钱?亲测ECS内存型r8i租赁价格
阿里云2核16G云服务器,内存型r8i实例1年6折优惠后价格为1901元,月付334.19元,按小时计费0.696221元。更多配置及优惠详情,请访问阿里云ECS页面。