码迷,mamicode.com
首页 > 其他好文 > 详细

记录一次服务器内存溢出

时间:2015-08-04 22:20:56      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:

事先声明,我是一个快乐的java coder,不是运维,吼吼。

2015-08-03 晚,在阿里云上创建了一个centos(1核1G内存)实例,准备搭建一个简单java环境,环境如下:

  1、jdk1.6-45(64bit-系统服务)

  2、mysql5.5(64bit-系统服务)

  3、memcached1.4.4-14(64bit-系统服务)

  4、nginx1.8.0系统服务

  5、tomcat6.0.44:做了集群,copy了三份:

      5i-admin01:端口8201

      5i-net01:端口8211

      5i-net02:端口8212

  然后顺便书写了tomcat启动脚本,测试下start、stop、restart命令

  配置nginx,配置mysql等等;

至此,简单的java环境基本搭建OK了。

但是,奇怪的事情发生了,启动5i-admin01和5i-net01成功,但是启动5i-net02居然失败了,内存不足,我可是1G啊况且只启动三个tomcat,没道理啊,各种优化,清理进程,OK,5i-net02启动成功了。然后启动项目中多线程爬虫,爬取数据到我的数据库中(我全站静态化,静态化的数据全部从互联网通过爬虫爬过来)……pia……爬虫项目挂了……重启,启动爬虫线程……pia……爬虫项目又挂了……反反复复,同事要去吃饭,暂时搁置了。

 

2015-08-03 18:20 ,今晚下班,迅速出门吃饭回来,准备大干一场,解决这么个玩意儿。

第一步,我想既然内存不足,那么这1G内存都被谁给吃了?直接来命令:

  # top    按键大写M

  在进程列表打开的一瞬间,茅塞顿开,列表中存在5个java进程,每个占用约150M内存,OK,记录下进程的PID;

第二步,查看进程的来源

  既然是java进程,而我服务器暂时只安装tomcat这一个会启动进程的容易,没跑的,就是它了,但是为了确定我还是做了下面一部,查看进程来源;

  # netstat -ntlp

  在第一步中记录的PID,在新打开的端口列表中查找,果然找到了对应的端口号,8080,8081等等。

  至此真想大白,这些java进程是运行中的tomcat,是我在测试tomcat启动脚本的时候,启动的一些进程,但是都没有关闭,因此一直占据着大量内存不释放,OK,至此解决方案就很明晰了;

第三步:杀掉无用进程

  # kill 9 PID 

整个世界一下子就清爽了,内存占用一下子从950M降到了200M。然后,重启三个项目,开启爬虫,cool,十分钟之内5000条记录轻松记录到数据库,而内存占用一直维持在500M,即使在多线程爬虫工作的时候(访问地址见我的另一篇文章:一个有意思的网站)。

 

记录一次服务器内存溢出

标签:

原文地址:http://www.cnblogs.com/xuxueli/p/4703101.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!