2

我正在使用 http 构建一个为 100000 个客户端提供服务的 rpc 服务器。服务器使用tomcat作为容器,基本上客户端发出的每个请求都会非常快,因为服务器会启动一个新线程来处理请求,因此没有长时间保持请求等待返回值。

我想知道这个 senario 的调音点是什么?我知道的第一件事是 ipv4.contrack,它控制最大 tcp 连接以及有关 tcp 连接回收的其他一些参数。

此外,我还应该研究什么?tomcat线程池可能是一个。虽然我认为 100000 个客户不太可能同时发出请求,但我确实想让服务器能够同时处理尽可能多的请求

4

2 回答 2

3

首先,您必须定义您的要求。就像是:

  • 最大并发连接数
  • 最大请求处理时间
  • ETC

之后,我建议进行广泛的负载测试。创建服务器的基本(但接近现实生活)实现并开始测试。

例如,最初您可以使用ab工具,然后再切换到 JMeter。

ab 将生成如下内容:

 ab -c 10 -n 100 http://www.xyz.com/
This is ApacheBench, Version 1.3d <$Revision: 1.73 $> apache-1.3
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking www.xyz.com (be patient).....done
Server Software: Apache-Coyote/1.1
Server Hostname: www.xyz.de
Server Port: 80

Document Path: /
Document Length: 3112 bytes

Concurrency Level: 10
Time taken for tests: 0.659 seconds
Complete requests: 100
Failed requests: 0
Broken pipe errors: 0
Total transferred: 367003 bytes
HTML transferred: 339208 bytes
Requests per second: 151.75 [#/sec] (mean)
Time per request: 65.90 [ms] (mean)
Time per request: 6.59 [ms] (mean, across all concurrent requests)
Transfer rate: 556.91 [Kbytes/sec] received

Connnection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.5 0 6
Processing: 8 63 144.6 12 514
Waiting: 8 63 144.7 12 513
Total: 8 64 144.8 12 514

Percentage of the requests served within a certain time (ms)
50% 12
66% 15
75% 19
80% 19
90% 491
95% 491
98% 512
99% 514
100% 514 (last request)

创建一个情节可能会有所帮助:

在此处输入图像描述

有了它,您可以继续进行所有性能优化和调整,因为可以立即看到结果。

您可能需要首先调整您的应用程序,但之后您有很多选择,包括以下内容:

  • JVM调优(GC调优等)
  • 连接器调整
  • 压缩
  • 蔚来
  • HTTP 1.1 特定的东西
  • 等等

只需使用正确的方法并开始做某事——这需要一些时间。

编辑Tomcat 调优技巧

坦率地说,关于这个主题有很多不同的文章:

没有100%通用的解决方案,你应该自己做深入调查

于 2013-07-31T11:13:19.893 回答
1

要了解的最重要的事情是您的系统将如何使用以及主要的性能因素(或多个因素)将是什么。换句话说,你会受到 I/O 限制还是 CPU 限制?一旦您了解了这一点,您就可以开始设计性能测试,在实际测试场景下为您的系统性能提供基线测量,然后改变您的系统配置(例如,线程池或堆的大小)以查看效果这对系统性能有影响。

我还建议阅读这篇论文。即使它现在已有十多年的历史,但设计讨论和权衡今天仍然适用。至少,它应该帮助您考虑哪些性能调整方面对您的系统最重要。

于 2013-08-03T18:02:22.270 回答