Stanford CoreNLP 服务器禁用日志记录
Stanford CoreNLP Server disable logging
感觉服务器的日志记录很详尽。有没有办法禁用或减少日志输出?似乎如果我向服务器发送文档,它会将内容写入 stdout
,这可能是性能杀手。
我能以某种方式做到吗?
更新
我找到了一种抑制服务器输出的方法。我的问题仍然是如何以及是否可以使用实际服务器的命令行参数来做到这一点。然而,对于肮脏的解决方法,似乎以下可以减轻开销。
运行服务器
java -mx6g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -prettyPrint false 2&>1 >/dev/null
其中 >/dev/null
会将输出通过管道传递给任何内容。不幸的是,仅此一点并没有帮助。 2&>1
似乎可以解决这个问题。我承认我不知道它到底在做什么。但是,我比较了两次运行。
运行 2&>1 >/dev/null
Processed 100 sentences
Overall time: 2.1797 sec
Time per sentence: 0.0218 sec
Processed 200 sentences
Overall time: 6.5694 sec
Time per sentence: 0.0328 sec
...
Processed 1300 sentences
Overall time: 30.482 sec
Time per sentence: 0.0234 sec
Processed 1400 sentences
Overall time: 32.848 sec
Time per sentence: 0.0235 sec
Processed 1500 sentences
Overall time: 35.0417 sec
Time per sentence: 0.0234 sec
运行out 附加参数
ParagraphVectorTrainer - Epoch 1 of 6
Processed 100 sentences
Overall time: 2.9826 sec
Time per sentence: 0.0298 sec
Processed 200 sentences
Overall time: 5.5169 sec
Time per sentence: 0.0276 sec
...
Processed 1300 sentences
Overall time: 54.256 sec
Time per sentence: 0.0417 sec
Processed 1400 sentences
Overall time: 59.4675 sec
Time per sentence: 0.0425 sec
Processed 1500 sentences
Overall time: 64.0688 sec
Time per sentence: 0.0427 sec
这是一个非常肤浅的测试,但它似乎会产生相当大的影响。这里的差异是 1.828 倍,随着时间的推移差异很大。
但是,这只是一个快速测试,我不能保证我的结果是完全正确的!
进一步更新:
我认为这与 JVM 如何随着时间的推移优化代码有关,但每个句子的时间变得与我在本地机器上的时间相当。请记住,我使用 2&>1 >/dev/null
消除了 stdout
日志记录得到了以下结果。
Processed 68500 sentences
Overall time: 806.644 sec
Time per sentence: 0.0118 sec
Processed 68600 sentences
Overall time: 808.2679 sec
Time per sentence: 0.0118 sec
Processed 68700 sentences
Overall time: 809.9669 sec
Time per sentence: 0.0118 sec
您现在是第三个被要求提供此信息的人 :) -- 。在 GitHub 存储库的 HEAD 以及 3.6.1 之后的版本中,有一个 -quiet
标志阻止服务器输出它接收到的文本。然后可以使用 SLF4J 配置其他日志记录,如果它在您的类路径中。
感觉服务器的日志记录很详尽。有没有办法禁用或减少日志输出?似乎如果我向服务器发送文档,它会将内容写入 stdout
,这可能是性能杀手。
我能以某种方式做到吗?
更新
我找到了一种抑制服务器输出的方法。我的问题仍然是如何以及是否可以使用实际服务器的命令行参数来做到这一点。然而,对于肮脏的解决方法,似乎以下可以减轻开销。
运行服务器
java -mx6g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -prettyPrint false 2&>1 >/dev/null
其中 >/dev/null
会将输出通过管道传递给任何内容。不幸的是,仅此一点并没有帮助。 2&>1
似乎可以解决这个问题。我承认我不知道它到底在做什么。但是,我比较了两次运行。
运行 2&>1 >/dev/null
Processed 100 sentences
Overall time: 2.1797 sec
Time per sentence: 0.0218 sec
Processed 200 sentences
Overall time: 6.5694 sec
Time per sentence: 0.0328 sec
...
Processed 1300 sentences
Overall time: 30.482 sec
Time per sentence: 0.0234 sec
Processed 1400 sentences
Overall time: 32.848 sec
Time per sentence: 0.0235 sec
Processed 1500 sentences
Overall time: 35.0417 sec
Time per sentence: 0.0234 sec
运行out 附加参数
ParagraphVectorTrainer - Epoch 1 of 6
Processed 100 sentences
Overall time: 2.9826 sec
Time per sentence: 0.0298 sec
Processed 200 sentences
Overall time: 5.5169 sec
Time per sentence: 0.0276 sec
...
Processed 1300 sentences
Overall time: 54.256 sec
Time per sentence: 0.0417 sec
Processed 1400 sentences
Overall time: 59.4675 sec
Time per sentence: 0.0425 sec
Processed 1500 sentences
Overall time: 64.0688 sec
Time per sentence: 0.0427 sec
这是一个非常肤浅的测试,但它似乎会产生相当大的影响。这里的差异是 1.828 倍,随着时间的推移差异很大。
但是,这只是一个快速测试,我不能保证我的结果是完全正确的!
进一步更新:
我认为这与 JVM 如何随着时间的推移优化代码有关,但每个句子的时间变得与我在本地机器上的时间相当。请记住,我使用 2&>1 >/dev/null
消除了 stdout
日志记录得到了以下结果。
Processed 68500 sentences
Overall time: 806.644 sec
Time per sentence: 0.0118 sec
Processed 68600 sentences
Overall time: 808.2679 sec
Time per sentence: 0.0118 sec
Processed 68700 sentences
Overall time: 809.9669 sec
Time per sentence: 0.0118 sec
您现在是第三个被要求提供此信息的人 :) -- -quiet
标志阻止服务器输出它接收到的文本。然后可以使用 SLF4J 配置其他日志记录,如果它在您的类路径中。