gpt4 book ai didi

java - Grinder 代理无法与多个工作人员的控制台通信

转载 作者:搜寻专家 更新时间:2023-11-01 03:54:21 24 4
gpt4 key购买 nike

我刚开始玩 Grinder(喜欢它!)但遇到了一些奇怪的行为,如下所示:

我一直在使用 5 个工作人员来解析推文文本并将它们发送到我正在进行负载测试的 URL。 Grinder 工作顺利,但我注意到 Python urlencode 在一些 unicode 或拉丁编码的东西上失败(即一些线程因此过早死亡)。

我想,由于 Jython 的底层实际上是 Java,我会尝试对可疑字符串使用 java.net.URLEncoder 并查看它的行为方式。

所以在我的 Jython 脚本的顶部我添加了

from java.net import URLEncoder

并将 python urlencode 包装在一个 try/catch 中,它返回到 UrlEncoder.encode(myString,'UTF-8')

当我用一名 worker 对其进行测试时,它似乎完美无缺地工作。但是一旦我将 worker 的数量增加到 2 或 3 以上,worker 就会启动,但随后无法与控制台通信,在不合理的长时间加载后抛出以下错误:

2012-11-15 15:59:04,287 ERROR worker-bootstrap: Error running worker process
net.grinder.communication.CommunicationException: Exception whilst sending message
at net.grinder.communication.AbstractSender.send(AbstractSender.java:57) ~[grinder-core-3.11.jar:na]
at net.grinder.communication.QueuedSenderDecorator.flush(QueuedSenderDecorator.java:60) ~[grinder-core-3.11.jar:na]
at net.grinder.engine.process.GrinderProcess.sendStatusMessage(GrinderProcess.java:638) ~[grinder-core-3.11.jar:na]
at net.grinder.engine.process.GrinderProcess.run(GrinderProcess.java:430) ~[grinder-core-3.11.jar:na]
at net.grinder.engine.process.WorkerProcessEntryPoint.run(WorkerProcessEntryPoint.java:86) [grinder-core-3.11.jar:na]
at net.grinder.engine.process.WorkerProcessEntryPoint.main(WorkerProcessEntryPoint.java:59) [grinder-core-3.11.jar:na]
Caused by: java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method) ~[na:1.6.0_37]
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92) ~[na:1.6.0_37]
at java.net.SocketOutputStream.write(SocketOutputStream.java:136) ~[na:1.6.0_37]
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65) ~[na:1.6.0_37]
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123) ~[na:1.6.0_37]
at java.io.ObjectOutputStream$BlockDataOutputStream.flush(ObjectOutputStream.java:1793) ~[na:1.6.0_37]
at java.io.ObjectOutputStream.flush(ObjectOutputStream.java:699) ~[na:1.6.0_37]
at net.grinder.communication.AbstractSender.writeMessageToStream(AbstractSender.java:90) ~[grinder-core-3.11.jar:na]
at net.grinder.communication.StreamSender.writeMessage(StreamSender.java:70) ~[grinder-core-3.11.jar:na]
at net.grinder.communication.AbstractSender.send(AbstractSender.java:53) ~[grinder-core-3.11.jar:na]
... 5 common frames omitted

这对我来说基本上像​​是超时(管道损坏,这意味着我猜是控制台厌倦了聆听,或者代理厌倦了尝试连接)。但我不确定为什么。 (我也不确定在异常中看到“while”这个词是什么感觉。Strewth,Hacker!你没看到吗险恶的内存泄漏? )

至于手头的代码问题,我可以比 Python urlencode 的(当前实现的)默认行为做得更好——我确实知道一些改进的技巧,但它们往往会变得困惑,我有点猜测其中一些无法在 Jython 中工作。

但我对这里的总体水平感到好奇。 Java URLEncode 在 3 个或更少的工作人员上工作得很好——那么为什么在工作人员更多的情况下它会失败呢?

猜测:

我的系统资源用完了吗?

  • 恐怖 - 是否每个工作人员都在创建其自己的 JVM?

    好吧,检查了一下,是的,事实证明是这样。但这并没有停止以前的事情。为什么现在?我的 Mac 中有 2 个处理器 - 我会认为如果这是问题所在,我们应该在 3 个 worker 时失败,但是,不。 4 或 5,是的。

出于某种原因,在 Jython 中使用 native Java 库不是一个好主意吗?

欣赏见解。

谢谢JB

最佳答案

我不确定这是否适用于您的情况,但请尝试像这样运行研磨机代理。

java net.grinder.Grinder -daemon 2

该命令的作用是,当研磨机无法连接到控制台或由于某种原因连接丢失时,它会 hibernate 一段时间并运行并尝试重新连接。我预感这可能会解决您的问题。

这方面的文档非常少,但这是我从哪里得到的。

http://grinder.sourceforge.net/g3/agents-and-workers.html

关于java - Grinder 代理无法与多个工作人员的控制台通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13406345/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com