记一次海外大型SLG游戏服务器进程被OOM的修复经历

 

事情经过

最近刚接手一个多次获得海外GooglePlay推荐的SLG的游戏项目,服务器是java的netty框架写的,客户端是cocos lua。

好吧既然服务器进程运行在jvm之上,吃内存倒是挺厉害的,我一个16G内存的服务器被吃的满满的,这个时候为了解决内存不足,我开启了4G的虚拟内存,方法如下:

sudo dd if=/dev/zero of=/swapfile bs=256M count=16 
sudo mkswap /swapfile 
sudo swapon /swapfile 
#开机自动启动
echo "/mnt/swapfile swap swap defaults 0 0 " >> /etc/fstab#After compiling, you may wish to 
#Code: 
sudo swapoff /swapfile 
sudo rm /swapfile

 开启虚拟内存之后就在线上稳定运行了半年多,突然有一天一个游戏服务进程被oom杀死了,首先我从/var/log/message里看到oom的记录,再到进程运行目录下查看了宕机前的堆栈信息,日志如下:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/444559.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(一)nodejs循序渐进-nodejs环境安装(基础篇)

目录 Node Node的优点 Node.js 安装配置 使用nvm管理不同版本的 node 与 npm nvm 与 n 的区别 卸载全局安装的 node/npm Windows 安装 Linux 安装 安装多版本 node/npm 在不同版本间切换 列出已安装实例 在多环境中,npm该如何使用呢? 其他命…

(二)nodejs循序渐进-nodejs基本类型和循环条件语法篇(基础篇)

目录 入门之helloworld 进阶之helloworld http服务器 步骤一、引入 required 模块 步骤二、创建服务器 基本语法篇 变量声明 基础类型 if else 循环语句 for for ... in while do和do while 运算符 加减乘除 , , !, ! typeof null,undefine…

(七)nodejs循序渐进-模块系统(进阶篇)

模块系统 为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统。 模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的。换言之,一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码、JSON 或…

(八)nodejs循序渐进-事件驱动(进阶篇)

事件驱动程序 Node.js 使用事件驱动模型,当web server接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。 当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户。 这个模型…

leetcode304. 二维区域和检索 - 矩阵不可变

给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2)。 上图子矩阵左上角 (row1, col1) (2, 1) ,右下角(row2, col2) (4, 3),该子矩形内元素的总和为 8。 示例…

(九)nodejs循序渐进-Express框架(进阶篇)

Express 框架 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。 使用 Express 可以快速地搭建一个完整功能的网站。 Express 框架核心特性: 可以设置中间件来响应 HTTP 请求。 定…

leetcode326. 3的幂 如此6的操作你想到了吗

给定一个整数,写一个函数来判断它是否是 3 的幂次方。 示例 1: 输入: 27 输出: true 示例 2: 输入: 0 输出: false 示例 3: 输入: 9 输出: true 示例 4: 输入: 45 输出: false 进阶: 你能不使用循环或者递归来完成本题吗? 注意最后一句…

(十)nodejs循序渐进-高性能游戏服务器框架pomelo之介绍和安装篇

目录 Pomelo 安装Pomelo 创建demoserver项目 pomelo命令 项目结构说明 pomelo框架 架构 服务器实现 客户端请求与响应、广播的抽象介绍 Pomelo pomelo是一个快速、可扩展、Node.js分布式游戏服务器框架,对游戏服务器开发感兴趣的同学可以关注关注。 之前…

(十二)nodejs循序渐进-高性能游戏服务器框架pomelo之创建一个游戏聊天服务器

上个章节我们简单介绍了下pomelo的安装和目录结构,有读者可能觉得有点吃不消,为什么不再深入讲一讲目录结构和里边的库,这里我就不费口舌了,大家可以去官网参考文档说明,本文只告诉大家如何利用这个框架来开发自己的东…

(十三)nodejs循序渐进-高性能游戏服务器框架pomelo之扩展聊天服务器为机器人自动聊天

聊天服务器扩展 大家在上一篇文章里相信已经学会了pomelo框架的基本用法了,那么我们在上一篇文章的代码基础上继续扩展,丰富系统,另外也熟悉下他的更多的用法,这一节我将扩展它:增加一个机器人自动聊天的功能。 目的…

leetcode1290. 二进制链表转整数 刷新认知,最简单算法题

给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。 请你返回该链表所表示数字的 十进制值 。 示例 1: 输入:head [1,0,1] 输出:5 解释:二进制数 (101) 转化为十进…

Redis:02---安装Redis(Linux+Windows+Docker)

Linux安装:一、安装方式1(下载源码编译安装)第一步:从下面的网址中下载Redis最新稳定版本的源代码sudo wget http://download.redis.io/redis-stable.tar.gz第二步:下载完之后解压,建立一个软链接指向于red…

C++: 06---构造函数析构函数

拷贝构造函数: 用一个已经存在的对象来生成一个相同类型的新对象。(浅拷贝)默认的拷贝构造函数: 如果自定义了拷贝构造函数,编译器就不在生成默认的拷贝构造函数。 如果没有自定义拷贝构造函数,但在代码中用到了拷贝构造函数,编译器会生成默认…

C++:11---友元函数、友元类

一、友元(friend) 概念:通过友元,打破了类的封装性,可以访问类内的所有成员分类:友元函数、友元类二、友元函数 概念:友元函数是一个普通函数,不属于类,但需要在类内表明友元关系 友元函数可访问类内所有成员,但类不可以访问友元函数…

C++:12---运算符重载

一、概念 对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型重载的运算符是具有特殊名字的函数,该函数也有返回值、参数列表、函数体二、运算符重载的3种实现方式 成员函数:私有、公有、保护都可以友元函数:同上全局函数:只能访问公有的三、运算符重载的…

Redis:03---Redis的启动与配置参数大全

一、Redis的可执行文件当我们安装完Redis之后,src和/usr/local/bin目录下提供了下面这些可执行程序,我们称之为Redis Shell:redis-serverRedis服务器redis-cliRedis命令行客户端redis-benchmarkRedis性能测试工具redis-check-aofRedis AOF持久…

leetcode80. 删除排序数组中的重复项 II

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定 nums [1,1,1,2…

Redis:04---键的基本命令(上)

一、KEYS:全量遍历键KEYS pattern功能:用来获取此数据库中所有的键名注意事项:KEYS命令需要遍历Redis中的所有键,当键的数量较多时会影响性能,不建议在生产环境下使用支持glob风格通配符格式,见下表&#x…

(十三) 深入浅出TCPIP之setsockopt参数详解

在socket编程中我们会经常用到setsockopt这个函数,那么本节我们将对这个函数的参数和使用做说明: 首先看下函数原型: int setsockopt( int socket, int level, int option_name,const void *option_value, size_t ,ption_len); 第…

Redis:05---键的基本命令(下) 生存周期

一、设置键生存/过期时间生存时间(Time To Live,TTL):在经过指定的秒数或者毫秒数之后,服务器就会自动删除生存时间为0的键过期时间(expire time):是一个UNIX时间戳,当键…