将Solr创建成Windows服务

最近有过这个需求,Google到了一个解决方案亲测可用,记在这里备忘

将Solr 6.1作为服务安装

原post:Running Solr 6.1 as a Windows Service

  1. 下载NSSM
  2. 把nssm.exe解压到任何目录
  3. 创建一个solrstart6.1.0.cmd (这是一个Windows的命令行文件,把你需要配置的启动参数写进去。下面的内容只是一个例子):
    C:\apache\solr-6.1.0\bin\solr start -f -h node3 -c -p 8983 -z "zk1:2181,zk2:2181,zk3:2181" -m 128m -s C:\apache\solr-6-cores
  4. 测试你的脚本,运行之后应该能登陆到Solr的管理界面中
  5. 打开一个命令行窗口,然后定位到你nssm.exe的文件夹中
  6. 执行:nssm.exe install "Apache - Solr 6.1"
    1. 在Application选项卡:
      1. Path: 选择你solrstart6.1.0.cmd
      2. Startup Directory: 设置成为包含你脚本文件的文件夹。
    2. 在Details选项卡
      1. Display Name:Apache - Solr 6.1
      2. Startup type: Automatic
    3. 在Log on选项卡
      1. 需要确认你指定的账户能够有管理员权限(如果不确定的话,那就用你当前的用户)
    4. 在I/O选项卡
      1. I/O Redirection
        1. Output(stdout):设置到一个地方,例如:path\to\my\solr\cmd\script\dir\solr-6.1.0-out.txt
        2. Error(stderr):path\to\my\solr\cmd\script\dir\solr-6.1.0-error.txt
      2. File rotation
        1. 选中Rotate files
        2. 选中Rotate while service is running
        3. Restrict rotation to files bigger than: (一般设置成5MB,所以在文本框里填5242880)
    5. 点击Install Service
  7. 打开系统服务,然后选中Apache - Solr 6.1
  8. 启动服务
  9. 验证一下服务是否成功启动
确保Solr服务能够响应Out Of Memory Exceptions
  1. 去这里:JIRA ticket
  2. 下载oom_win.cmd然后把它放在你的solr\bin文件夹中,与solr.cmd在同一个文件夹。
  3. 用文本编辑器打开solr.cmd
  4. 去查找所有以下面开头的地方:
    1. 查找“/solr_gc.log”
  5. 在“/solrgc.log”后面,粘贴上-XX:OnOutOfMemoryError="%SOLRSERVERDIR%..\bin\oomwin.cmd %SOLRPORT% !SOLRLOGS_DIR!"
    1. 我有两处需要粘贴的。注意:这个方法相当于手动修改,也可以使用JIRA ticket中的补丁,用哪种方法自己决定。
  6. 修改完成,去重启刚才新建的Solr 6.1的服务,它现在应该能够在产生OutOfMemory错误时Kill掉进程。
  7. 强制出发OutOfMemory可以query:.然后返回10000000行
    1. 如果你真的有这么多东西的话,这将会强制出发OutOfMemory异常,总之就是尽可能做消耗内存的工作,或者干脆减小JVM的大小。
    2. 你应该能发现Solr的管理界面短暂地掉线然后又重新上线。
  8. 现在你能够看到服务由重新上线了。所以现在我们将JVM的内存调成正常,只需要编辑你的solrstart6.1.0.cmd文件,把-m 128m改成-m 4g (128m 到 4g)
  9. 保存然后重启服务
  10. 进入Solr的管理界面去看看JVM内存是不是正确。

Friskit

继续阅读此作者的更多文章