Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 在连接请求和性能问题之间分配等待时间_Performance_Netty - Fatal编程技术网

Performance 在连接请求和性能问题之间分配等待时间

Performance 在连接请求和性能问题之间分配等待时间,performance,netty,Performance,Netty,我用Netty开发了一个基于tcp/ip协议栈的定制协议服务器。写这篇文章是一种乐趣 现在我正在测试性能。我在netty上编写了一个测试应用程序,只需将大量(20.000+)的“客户机”连接到服务器(对于带有线程的循环,请在每次引导连接后等待(1))。一旦连接了客户端通道,它就会向服务器发送登录请求,服务器会检查帐户并发送登录响应 整体性能似乎还不错。所有客户端均在60秒以下登录。但不太好的是每个连接的排列等待时间。我有非常快的登录和非常慢的登录。在整个试验时间内,从9ms到40.000ms不等

我用Netty开发了一个基于tcp/ip协议栈的定制协议服务器。写这篇文章是一种乐趣

现在我正在测试性能。我在netty上编写了一个测试应用程序,只需将大量(20.000+)的“客户机”连接到服务器(对于带有线程的循环,请在每次引导连接后等待(1))。一旦连接了客户端通道,它就会向服务器发送登录请求,服务器会检查帐户并发送登录响应

整体性能似乎还不错。所有客户端均在60秒以下登录。但不太好的是每个连接的排列等待时间。我有非常快的登录和非常慢的登录。在整个试验时间内,从9ms到40.000ms不等。是否有可能在请求通道(Fifo)之间共享等待时间

我测量了很多重要的时间戳,发现了一个奇怪的现象。我有很多连接,其中服务器的时间戳“channelconnected”在客户端的时间戳之后(最多19秒)。我也有“正常”的情况,它们匹配,客户端发送和服务器接收之间的时间只有几秒钟。在这两种情况之间存在着各种情况。客户机和服务器“通道连接”的距离如此之远,这怎么可能呢

可以肯定的是,客户端在发送服务器的登录响应后会立即收到该响应

调整: 我想我读了这里大部分的性能文章。我正在使用OrderMemoryWareThreadPool,在4CPU-Hyper-Threading-i7上有200个线程用于传入连接,并且使用已知的攻击性选项启动服务器应用程序。我还完全调整了我的Win7 TCP堆栈。 服务器在我的机器上运行非常平稳。CPU使用率和内存消耗约为可使用量的50%

信息太多: 我还从两台不同的机器上启动了两个测试应用程序,分别“攻击”服务器和15000个连接。在那里,我有大约800个连接被服务器超时。有什么评论吗

向内蒂致以最良好的问候和干杯,
Martin

Netty有一个专用的boss线程,用于接受传入连接。如果boss线程接受一个新连接,它会将该连接转发给工作线程。因此,在负载下,接受和实际套接字读取之间的延迟可能比预期的要大。虽然我们正在研究不同的方法来改善这种情况,但同时,您可能希望增加工作线程的数量,以便工作线程处理更少的连接


如果您认为它的性能比非Netty应用程序差,请随意复制测试用例。我们将尝试重现并修复该问题。

文章规定每秒有9k个请求。到目前为止,我的请求速度大约为每秒350次。我想我忽略了一些事情。为了增加工作线程的数量,我必须更改线程池的线程数量,对吗?我已经测试过了,与我目前的200个线程相比,性能略有下降。还有其他提示吗?我的测试客户机中的Thread.wait(1)是否正常,或者这只是产生了太多的负载?其他用户是否有类似性能行为的体验?我只是在搜索瓶颈。在构造
ChannelFactory
时,必须使用
Executors.newCachedThreadPool()
并指定一个整数参数。信任,这是否意味着有3个线程处理一个请求。。(1) boss线程接收传递到(2)IO工作线程的请求。然后将请求传递给可能使用(3)另一个线程的处理程序(来自管道中设置的线程池)?当时我错过的一点是“执行处理程序”。我的应用程序已经连接到数据库,在我的性能测试中,工作线程在等待db返回时被阻塞。我所写的有序线程池作为工作线程池提供给服务器引导,因为我对“执行处理程序”模型一无所知。也许Netty可以添加一个标准示例,如何将Netty连接到数据库以推广这个如此重要的功能?