我正在尝试在 Ubuntu 12.10(32 位)上运行 Jetty 9。我在 JDK 1.7.0_40 中使用的 JVM。我在我的服务器上设置了一个使用 RestLib 的休息服务。rest 服务是一个 POST 方法,它只接收数据而不对其进行处理并响应成功。
我想看看 Jetty9 服务器在给定资源下的最大负载是多少。我有一个带有 8 GB 内存的 Intel i5 处理器盒。我已经设置了一个 Jmeter 来在 localhost 设置中测试这个其余部分。我知道这是不可取的,但我想知道这个数字(只是出于好奇)。
当我运行 JMeter 以在正文中使用 1 MB 的有效负载数据测试此 POST 方法时,我得到了大约 20 的吞吐量(对于 100 个用户)。
我首先使用 iperf 测量了带宽
iperf -c 127.0.0.1 -p 8080
------------------------------------------------------------
Client connecting to 127.0.0.1, TCP port 8080
TCP window size: 167 KByte (default)
[ 3] local 127.0.0.1 port 44130 connected with 127.0.0.1 port 8080
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 196 MBytes 165 Mbits/sec
165 MB 的数字对我来说似乎小得可笑,但这是一个观察结果。
我在启用 StatisticsHandler 的情况下运行服务器并观察请求平均时间。还使用 nmon 监控工具观察系统资源。
CPU 使用率约为 20%(总体),4GB 可用内存和服务器中的线程数(使用 jconsole 监控)约为 200(我在 start.ini 文件中指定最大线程数为 2000)。
Jmeter 被配置为反复轰炸。
我在 nmon 工具中观察了本地环回接口中的网络使用情况,大约是 30 MB。这与前面引用的 iperf 数据一致。
我用 weblogic(使用 JDK 1.6)尝试了同样的实验,它在 lo 接口中使用了近 250 MBps。我在 sysctl 配置中明确禁用了 tcp 同步 cookie,以避免由于系统将测试视为 DOS 攻击而造成的限制。
请帮助我理解这个数字。我在配置中遗漏了什么吗?此处的 n/w 似乎是一个限制因素,但由于它是一个环回接口,因此 Weblogic 案例证明没有物理限制。
请帮助我了解在 Jetty 9 案例中我做错了什么。
我也经常在 Jetty9 日志中收到此警告
WARN:oejh.HttpParser:qtp14540840-309: 解析异常: java.lang.IllegalStateException: HttpChannelOverHttp@1dee6d3{r=1,a=IDLE,uri=-} 关闭后数据过多