架构师_程序员

查看: 154|回复: 0

Azure DevOps 2020(三)限制搜索(ES)内存占用

[复制链接]
发表于 2020-9-1 22:36:15 | 显示全部楼层
Azure DevOps 2020(一)初识微软 Azure DevOps(TFS)
https://www.itsvse.com/thread-9239-1-1.html

在安装完 Azure DevOps 2020 后,启动后,发现搜索服务内存和CPU占用特别高,如下图:

QQ截图20200831225653.jpg

回顾关于 es 的文章:

【实战】Centos 7 安装部署elasticsearch-6.5.2教程
https://www.itsvse.com/thread-6173-1-1.html

【实战】elasticsearch-6.5.2安装elasticsearch-head插件
https://www.itsvse.com/thread-6190-1-1.html

【实战】elasticsearch-6.5.2安装elasticsearch-analysis-ik教程
https://www.itsvse.com/thread-6191-1-1.html

【实战】.net/c# 通过NEST调用elasticsearch搜索[附源码]
https://www.itsvse.com/thread-6294-1-1.html

Azure DevOps 2020 使用的是 elasticsearch v6.2 版本,尝试找到 es 服务,服务命令如下:

"D:\Program Files\Azure DevOps Server 2020\Search\ES\elasticsearchv6.2\bin\elasticsearch-service-x64.exe" //RS//elasticsearch-service-x64

尝试修改 jvm.options 配置,路径为:D:\Program Files\Azure DevOps Server 2020\Search\ES\elasticsearchv6.2\config,默认为 2400M 如下图:

QQ截图20200831221152.jpg




最小堆的大小和最大堆的大小应该相等

Elasticsearch可获得越多的堆,并且内存也可以使用更多的缓存。但是需要注意,分配了太多的堆给你的项目,将会导致有长时间的垃圾搜集停留。

设置最大堆的值不能超过你物理内存的50%,要确保有足够多的物理内存来保证内核文件缓存。


参考资料:https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html

将初始和最大内存设置 1200M,如下:

  1. -Dfile.encoding=UTF-8
  2. -Dio.netty.noKeySetOptimization=true
  3. -Dio.netty.noUnsafe=true
  4. -Dio.netty.recycler.maxCapacityPerThread=0
  5. -Djava.awt.headless=true
  6. -Djava.io.tmpdir=tmp
  7. -Djna.nosys=true
  8. -Dlog4j.shutdownHookEnabled=false
  9. -Dlog4j2.disable.jmx=true
  10. -Xms1200m
  11. -Xmx1200m
  12. -Xss1m
  13. -XX:+AlwaysPreTouch
  14. -XX:+HeapDumpOnOutOfMemoryError
  15. -XX:+UseCMSInitiatingOccupancyOnly
  16. -XX:+UseConcMarkSweepGC
  17. -XX:CMSInitiatingOccupancyFraction=75
  18. -XX:-OmitStackTraceInFastThrow
复制代码
修改保存后,重新启动 Elasticsearch 服务,发现还是内存占用到 2G 以上,无法解决我们的问题。

通过设置 _JAVA_OPTIONS 环境变量限制内存大小,发现 es 服务无法启动。
---------------------------
服务
---------------------------
本地计算机 上的 Elasticsearch 6.2.4 (elasticsearch-service-x64) 服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。
---------------------------
确定   
---------------------------
JAVA Error occurred during initialization of VM 错误的解决方法
https://www.itsvse.com/thread-3972-1-1.html

查看启动日志,会报错如下:

2020-09-01 21:23:50 Commons Daemon procrun stdout initialized
Error occurred during initialization of VM
Initial heap size set to a larger value than the maximum heap size

最终解决方案如下
进入到程序的 bin 目录,执行如下命令:

  1. elasticsearch-service.bat manager
复制代码
弹出配置,切换到 Java 选项卡,修改如下图配置项,点击应用确认即可。

QQ截图20200901223157.jpg

发现内存已经降下来了,如下图:

QQ截图20200901223503.jpg

(完)





上一篇:Mysql CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP区别
下一篇:.NET Core微服务架构最佳实践
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2020-10-28 07:51

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表