NutzCN Logo
问答 内存溢出,CPU占用率高
发布于 2876天前 作者 exotfboy 1539 次浏览 复制 上一个帖子 下一个帖子
标签:

系统用的是Spring MVC + hibernate + ElasticSearch,测试期间没啥问题(测试机就是本机了:)
untitled1_png

但是部署到服务器后发现,正常占用600M左右内存,一旦触发创建索引这个操作,内存一下子就到1.2G左右,CPU占用50%以上,在50%-80%之间徘徊,然后导致应用响应很长,TTFB能达到快1分钟。创建索引的流程是从数据库读取数据,大概200w条吧,然后调用ElasticSearch(另一台机器)的http接口创建,200W创建完大概3个小时左右,创建索引调用接口都是通过http传输json的方式进行。

这个时候服务器的主要问题还是响应慢,OOM没有频繁出现,是通过查日志发现的,我想起码把内存弄低点吧,相比响应慢和OOM导致退出相比,后者更严重,所以弄了个jprofiler上去准备抓,结果jp也是个占内存的主,没一会就oom了,这会儿暂时截图不了,因为有小伙伴正在服务器上部署别的东西。

然后我就准备本地调试调试看看情况,

untitled2_png

untitled4_png

昨天下班前把索引启动起来,早上截图,悬崖下跌那个地方是手动调用了GC
untitled5_png

问:

1 建索引为啥会导致CPU占用率那么高? 数据库服务器也是单独的,http请求响应慢我想跟CPU有关系吧

2 那些操作可能会导致内存剧增?

3 能否限制虚拟机使用固定的最大内存,比如2G,然后保证不要OOM?就是说你可以少处理一点请求,慢一点,但是不要逞强导致退出。

2 回复

要不单独一个进程建索引, 要不降低建索引的速度(每读取N条数据库记录就sleep一下)

如果单独一个进程的话,占用的也是本机资源啊。

sleep我去试一下看看

添加回复
请先登陆
回到顶部