【问题标题】:my ubuntu system getting stuck while starting elastic search service我的 ubuntu 系统在启动弹性搜索服务时卡住了
【发布时间】:2019-10-12 03:57:09
【问题描述】:

我有一个 ubuntu 18.04 系统,4 GB 内存和 500 GB 硬盘。我在我的系统中安装了弹性搜索,比如“sudo apt-get install elasticsearch”

但是在使用命令启动弹性搜索时:sudo service elasticsearch start

我的系统卡住了,我什么也做不了。如何解决这个问题

【问题讨论】:

  • 也许这类问题最好的地方是在“Ask Ubuntu”中?
  • brew info elasticsearch@version 在开始弹性搜索之前保持日志运行,然后检查日志...
  • 检查操作系统上的空闲内存并检查 jvm.options 的 xmx 和 xms。也许你没有足够的内存

标签: ruby-on-rails elasticsearch


【解决方案1】:

也许我可以回答这个问题,因为我不久前遇到了这个问题,并且在一些研发之后也解决了这个问题。我的 ROR 应用程序是 Live 并且有超过 8000 多个图像和 CPU 密集型,因为我的应用程序中发生了更多事情服务器,因为每个请求都使用 LAT/LNG 来提供地理计算的响应。当我在 elasticsearch 上启动并重新索引我的数据时,我遇到了类似的内存不足问题。

我的学习-

  1. ElasticSearch 是一个会吃掉你的内存的怪物。
  2. 无论您的关键字或数据如何优化,您推送到 elasticSearch 以获取索引,您都必须保留一个默认的备份内存缓冲区。

我做了什么...解决了我的问题...

  1. Add a Swap space 就像一个备份内存,以防你的 RAM 被耗尽。
  2. 为了更安全,我还升级到了 8GB HD。

现在,由于我已按照上述步骤操作,尽管我的 indexex 数据的大小每个月都变得巨大,但我没有遇到任何内存不足错误。此外,在索引这个巨大的数据时,我仍然可以避免错误和内存相关问题数据。

我最近为改善 Rails 应用程序的内存消耗而做的另一件事是在我的 ruby​​ 2.4.1 中注入 jmalloc。您可以阅读更多 here 但简而言之,它会有所帮助改善 ruby​​ 应用程序的内存消耗。对 Jmalloc 的复制解释如下 -

Ruby 传统上使用 C 语言函数 malloc 在存储对象时动态分配、释放和重新分配内存。 Jemalloc 是由 Jason Evans 开发的 malloc(3) 实现(因此 malloc 开头的“je”首字母缩写),由于其专注于避免碎片和可扩展的并发支持,与其他分配器相比,它在分配内存方面似乎更有效.

以下是我通过使用 rvm 在我的生产服务器上重新安装 2.4.1(在 staging/dev 上测试之后)将 Jmalloc 添加到现有 Ruby 2.4.1 中的步骤。

 ===========CHECK RVM  --
 rvm info
 ============ check ruby version
 ruby -v
 ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
 ========== if ruby is installed, reinstall with Jemalloc and compile
 =============REINSTALL RUBY WITH JAMALLOC
 rvm reinstall 2.4.1 -C --with-jemalloc --disable-binary
 ============VERIFY JMALLOC IN THE BELOW LIST of ruby compiling list
 ruby -r rbconfig -e "puts RbConfig::CONFIG['LIBS']"
 -lpthread -ljemalloc -lgmp -ldl -lcrypt -lm 

即使在使用 2000 个随机请求进行测试后,在 ruby​​ 中注入 jmalloc 的结果也非常出色,我的整体 App 内存只有 364MB,并且通过使用下面提到的测试 gem 进行测试,始终保持不变。

gem "memory_profiler"
gem "derailed_benchmarks"

希望对你有帮助

【讨论】:

    【解决方案2】:

    Elasticsearch 使用的 CPU 和 (RAM) 内存非常高。所以你可以告诉弹性搜索你只能使用特定数量的内存。

    1. 先到/etc/elasticsearch/
    2. 只看目录结构,你会得到一个名为jvm.options的文件
    3. 只需通过在 jvm.options 文件中添加 2 行代码来分配内存: -Xms1g -Xmx1g
    4. 只需重新启动您的 elasticsearch 并享受它 :)

    【讨论】:

      猜你喜欢
      • 2016-12-05
      • 2021-02-18
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2022-10-21
      • 1970-01-01
      相关资源
      最近更新 更多