Python haproxy背后的twisted应用程序

Python haproxy背后的twisted应用程序,python,asynchronous,twisted,haproxy,Python,Asynchronous,Twisted,Haproxy,我有一个简单的扭曲应用程序,服务于Hello World!通过HTTP协议。我试图运行几个实例来利用所有处理器 但我提到,单twisted应用程序处理的请求甚至比haproxy后面的同一应用程序的1、2或5个实例多得多。我不明白为什么会这样 我通过JMeter运行5000个线程。当我在127.0.0.1:9001上运行它时,它在500毫秒的时间内成功地处理了每个请求。当我在127.0.0.1:8080上运行它时,有些响应是503服务不可用,有些运行时间超过500毫秒 这是我的配置文件: glob

我有一个简单的扭曲应用程序,服务于Hello World!通过HTTP协议。我试图运行几个实例来利用所有处理器

但我提到,单twisted应用程序处理的请求甚至比haproxy后面的同一应用程序的1、2或5个实例多得多。我不明白为什么会这样

我通过JMeter运行5000个线程。当我在127.0.0.1:9001上运行它时,它在500毫秒的时间内成功地处理了每个请求。当我在127.0.0.1:8080上运行它时,有些响应是503服务不可用,有些运行时间超过500毫秒

这是我的配置文件:

global
    maxconn 500000
    user german

defaults
    mode http
    retries 0
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms
    balance roundrobin
    # if something goes wrong with server, redistribute client to a working server
    option redispatch

listen http 127.0.0.1:8080
    mode http
    option httpchk GET / HTTP/1.1

    server prototype-local 127.0.0.1:9001 maxconn 0 weight 1 maxqueue 0 cookie server01 check inter 5000 rise 1 fall 3

    balance roundrobin

    # to see ip's of clients
    option forwardfor
    option http-server-close
    # disable or enable immediate session resource cleaning(useful for chat)
    # option nolinger
    # inserts cookie to each client requet to identify a process
    cookie SWCOMMET insert indirect nocache
    # will be enalbed as soon as main server with process crashed :nice fail resistance
    option allbackups
当我在127.0.0.1:9001上运行它时,它会在500毫秒的时间内成功地处理每个请求

你在开玩笑吗?如果像hello world这样简单的应用程序在500毫秒内做出响应,那么肯定有什么地方坏了

您应该检查您的服务器是否没有交换,例如:由于内存泄漏,这可能解释了如此巨大的响应时间,以及为什么在链中添加haproxy会更糟糕,因为这两个进程都会受到影响

事实上,您从haproxy获得503意味着它丢失了无法响应健康检查的服务器。顺便说一句,这与巨大的响应时间是一致的

也有可能由于任何原因,应用程序正在消耗所有的CPU,如果haproxy绑定到同一个CPU,则会导致对它的高调度延迟。您应该监视CPU使用情况,并查看每个进程在哪个CPU上运行,并为此使用top。理想情况下,您应该使用taskset将haproxy强制到特定的核心,并将您的应用程序强制到另一个核心。避免线程跨内核迁移对于实现高负载至关重要,因此每个新实例都必须在专用内核上运行

如果服务器占用大量内存,则应使用haproxy的服务器maxconn参数序列化请求并删除maxqueue

在我在haproxy配置中看到的其他东西中,全局maxconn是巨大的,没有多大意义,因为haproxy需要大约9GB的RAM才能达到这个限制。此外,您还需要在“默认值”部分中设置maxconn值,因为前端的默认值是2000,这可能低于您正在尝试的值

您应该删除maxconn 0、maxqueue 0和权重1,因为它们是默认值,只会使对配置的理解复杂化

当我在127.0.0.1:9001上运行它时,它会在500毫秒的时间内成功地处理每个请求

你在开玩笑吗?如果像hello world这样简单的应用程序在500毫秒内做出响应,那么肯定有什么地方坏了

您应该检查您的服务器是否没有交换,例如:由于内存泄漏,这可能解释了如此巨大的响应时间,以及为什么在链中添加haproxy会更糟糕,因为这两个进程都会受到影响

事实上,您从haproxy获得503意味着它丢失了无法响应健康检查的服务器。顺便说一句,这与巨大的响应时间是一致的

也有可能由于任何原因,应用程序正在消耗所有的CPU,如果haproxy绑定到同一个CPU,则会导致对它的高调度延迟。您应该监视CPU使用情况,并查看每个进程在哪个CPU上运行,并为此使用top。理想情况下,您应该使用taskset将haproxy强制到特定的核心,并将您的应用程序强制到另一个核心。避免线程跨内核迁移对于实现高负载至关重要,因此每个新实例都必须在专用内核上运行

如果服务器占用大量内存,则应使用haproxy的服务器maxconn参数序列化请求并删除maxqueue

在我在haproxy配置中看到的其他东西中,全局maxconn是巨大的,没有多大意义,因为haproxy需要大约9GB的RAM才能达到这个限制。此外,您还需要在“默认值”部分中设置maxconn值,因为前端的默认值是2000,这可能低于您正在尝试的值


您应该删除maxconn 0、maxqueue 0和weight 1,因为它们是默认值,只会使配置的理解变得复杂。

我的意思是响应时间永远不会超过500毫秒。当并发请求太多时,响应时间会增加。关于专用核心的建议很好。我猜问题出在连接超时选项中。一旦在5秒内未建立连接,haproxy将返回时间503。我将这个值增加到50秒,得到了与应用程序本身相同的行为。好的,这显然是应用程序响应太慢的问题。您正在使所有线程饱和,新连接必须等待旧连接释放。你确定你不会在应用程序的任何地方浪费时间吗?500毫秒对于这一点来说是巨大的,真的。5-50微秒会更合理。我的意思是响应时间永远不会超过500毫秒。当有太多并发请求时,响应时间会增加。关于专用内核的好建议。我想是的
e连接超时选项中存在问题。一旦在5秒内未建立连接,haproxy将返回时间503。我将这个值增加到50秒,得到了与应用程序本身相同的行为。好的,这显然是应用程序响应太慢的问题。您正在使所有线程饱和,新连接必须等待旧连接释放。你确定你不会在应用程序的任何地方浪费时间吗?500毫秒对于这一点来说是巨大的,真的。对此,5-50微秒更为合理。