系统用的是Spring MVC + hibernate + ElasticSearch,测试期间没啥问题(测试机就是本机了:)
但是部署到服务器后发现,正常占用600M左右内存,一旦触发创建索引这个操作,内存一下子就到1.2G左右,CPU占用50%以上,在50%-80%之间徘徊,然后导致应用响应很长,TTFB能达到快1分钟。创建索引的流程是从数据库读取数据,大概200w条吧,然后调用ElasticSearch(另一台机器)的http接口创建,200W创建完大概3个小时左右,创建索引调用接口都是通过http传输json的方式进行。
这个时候服务器的主要问题还是响应慢,OOM没有频繁出现,是通过查日志发现的,我想起码把内存弄低点吧,相比响应慢和OOM导致退出相比,后者更严重,所以弄了个jprofiler上去准备抓,结果jp也是个占内存的主,没一会就oom了,这会儿暂时截图不了,因为有小伙伴正在服务器上部署别的东西。
然后我就准备本地调试调试看看情况,
昨天下班前把索引启动起来,早上截图,悬崖下跌那个地方是手动调用了GC
问:
1 建索引为啥会导致CPU占用率那么高? 数据库服务器也是单独的,http请求响应慢我想跟CPU有关系吧
2 那些操作可能会导致内存剧增?
3 能否限制虚拟机使用固定的最大内存,比如2G,然后保证不要OOM?就是说你可以少处理一点请求,慢一点,但是不要逞强导致退出。