我目前正在尝试创建一个模拟服务器,该服务器以200ms的睡眠时间生成静态json响应(100KB)。我在启动时从光盘中读取了Json一次,并将其作为字符串存储在实例变量中,并针对每个请求进行渲染。
public class Bot {
private String json;
public Bot() {
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("huge.json");
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
try {
JSONObject jsonObject = (JSONObject) new JSONParser().parse(inputStreamReader);
json = jsonObject.toJSONString();
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}
@GET
@Path("/endpoint")
@Produces(MediaType.APPLICATION_JSON)
public Response api(@QueryParam("sleep") String sleep) {
if (sleep != null && !sleep.isEmpty() && Integer.valueOf(sleep) > 0) {
try {
Thread.sleep(Integer.valueOf(sleep));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return Response.status(200).entity(json).build();
}
}
另外我的下排设置看起来像这样-
final Undertow.Builder builder = Undertow.builder()
//.addHttpsListener("port", "0.0.0.0", sslContext)
.addHttpListener(4080, "0.0.0.0")
.setSocketOption(Options.SSL_CLIENT_AUTH_MODE, SslClientAuthMode.REQUESTED)
.setSocketOption(Options.CONNECTION_LOW_WATER, 20000)
.setSocketOption(Options.CONNECTION_HIGH_WATER, 21000)
.setBufferSize(1024 * 16)
.setIoThreads(Math.max(config.minIOThreads, Runtime.getRuntime().availableProcessors() - 1))
.setSocketOption(Options.BACKLOG, 2048)
.setServerOption(UndertowOptions.ALWAYS_SET_DATE, true)
.setServerOption(UndertowOptions.SSL_USER_CIPHER_SUITES_ORDER, true)
.setServerOption(Options.SSL_ENABLED_CIPHER_SUITES, CIPHER_SUITES)
.setHandler(Handlers.header(Handlers.path().addPrefixPath("/", getRestEasyServlet(config)),
Headers.SERVER_STRING, "Mock Server"))
.setWorkerThreads(20000);
undertow = builder.build();
undertow.start();
我正在以非常基本的最小并发/线程数为1运行apache基准测试。
ab -t 9999 -k -n 10000 -c 1 host
我原以为只有1个保持活动连接(工作线程将休眠200毫秒,并将json写入连接,最终连接将返回到池中,ab将重用此连接以发送后续请求)考虑到我要睡200ms,我将得到5的rps。但是我注意到,当我监视进程套接字时,会创建很多管道,最终它们会由于TooManyFile open Exception而最大化。
我不确定我在这里缺少什么。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。