文章分类 » Blog my Blog

JVM堆外内存溢出

一个socket服务网项目,每台机器的线程量3w左右。最后一次更新发布后,出现了一个奇怪的问题,就是运行一段时间之后,jvm的堆外内存就会基本被占用完,需要重启一次服务器才行。为了服务器安全,设置了一个内存使用上限比例,当服务器内存使用比例到达这个数值之后,就不再接收用户的请求,表现出来的现象就是用户无法登陆了。问题很严重。

经过几位高级工程师的讨论和分析,猜测造成这种现象可能的原因有两个:
1.我们的应用中使用了ByteBuffer.allocateDirect ,这种方式会使用堆外内存,但由于线上服务器使用的jdk版本时 6.32之前的一个版本,在此之前的版本中存在堆外内存回收的bug,因此认为可能是这个原因导致了当前问题。
2.jdk工具包中的java.util.zip.Deflater方法会使用堆外内存,同时,这个方法还存在内存释放方面的bug。我们的应用中使用了xmpp,据说这个会很频繁的调用这个方法,有可能是这个原因造成的服务器堆外内存溢出 。

但是堆外内存很难检测,按照文章中的推荐,需要使用工具查看我们的应用中是否有不停的调用这个方法,推荐的工具是google-perftools。这个东西还没怎么用过,需要了解一下怎么安装和使用。尽快把环境部署起来吧。

个人学习总结分析。。。

从开始做开发到现在,真正做前端的时候不多,以前做的也是一些简单的页面,没有什么华丽的效果,绚丽的展现,但是如果能做出这么一个产品是我很大的一个梦想。到目前为止两次动手准备学前端,但是都没怎么坚持下来。毛病有很多,其中一个显著的是,当自己动手的时候,遇到了问题,会去网上找答案,找到了但是记不住。。。偶尔,还会迷失在浩如烟海的大批答案中。

各种各样的问题和不停的低效率的尝试总是非常快的消耗我的耐心和精力,而且少有连续的时间让我能连续的学习(这里是为自己找借口呢。。。)。实际是有时间的,有时候开始学习一点,然后就碰到一些诸如下班,开会等事情打断,一旦打断之后自己就很不容易接上之前的进度而继续学下去。

闲下来的时候,大把的时间也没有花在认真钻研一下某一个框架或者某一个产品上,而是花在了大致浏览其他新闻和新框架、新语言上面。虽然这样表现出自己对很多语言潮流和概念潮流都比较了解,但是并么有精通,导致自己也就嘴上厉害一点,但是做起东西来并不如意,总是各种卡壳,因为有太多细节不知道如何处理和技术功底不足,有些甚至只是一些很初级的东西。

一直有觉得,想要做出来一款产品,想要做私活,想要创业,需要自己也要会前端才行,这样才能做的来。最近自己想了一下,发现那样的话,还是拿自己作为一个开发人员去做,自己做的仍然是最低级的,最可替代的活,仍然不能提升自己的价值。诚然,能够做到高级的技术,也是非常挣钱,但仍然是可计算的,可替代的技术的钱。

因此,我觉得我应该在当前已经熟悉的模块和领域,深入的研究下去,精通这个之后,涉猎其他领域应该也轻松的多,因为大家都是使用的相同的协议而只是用了不同的语言、语法去实现而已。

回归博客

14年4月23日,工作算是告一段落,也有时间做点自己的东西了。
想动手做东西的时候,却发现自己其实已经很久没有动手,同时还导致了自己不但手上疏于联系 ,连脑袋都不怎么转了。既然重新回归,那就继续自己的博客呗。应该没有多少人看,也不想多少人看,作为一个自己记录自己思考与进步的地方,作为一个能让自己肆意放纵的地方,私有一些也许更好。

如果想要做一个网站,或者一个app,总要有个服务器,可是自己的台式机和笔记本又不能随时在线。最近看起来阿里云还凑合,发现有个88元/年的产品,基本已经满足我的需求,果断下手买了。

然后顺便在万网上瞅了一眼,发现之前自己用的那个域名已经由于没人注册,现在已经是空闲状态了,一看价格又不贵(其实是现在手头比较宽裕),于是就与空间一块买了。

公司网速太慢了,捯饬了半天都没能安装好。还是回家后给力,迅速安装完成了wordpress,把以前的日志导入进来。发现确实已经太久没整理了。中间写的一些东西都放在了百度空间里,有时间可以转移过来。

具体自己下面要做个什么东西,暂时心里还没谱,但是总的来说,开始动手了就好。

环境空间支持python应该,将来用这个做服务脚本吧。

暂时先到这儿,太困了。睡觉先。