haproxy背后扭曲的应用程序



我有一个简单的扭曲应用程序,它通过HTTP协议为"Hello World!"提供服务。我正在尝试运行几个实例来利用所有处理器。

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

我运行了5000个线程,通过JMeter获取/。当我在127.0.0.1:9001上运行它时,它在500毫秒内成功地处理了每个请求。当我在127.0.0.1:8080上运行它时,有些响应是503 Service Unavailable,有些运行时间超过500ms。

这是我的配置文件:

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毫秒的时间内成功处理了每个请求

你在开玩笑吗?如果像"你好世界"这样简单的应用程序在500毫秒内做出响应,那么肯定有什么东西坏了。

你应该检查你的服务器是否没有交换(例如:由于内存泄漏),这可以解释为什么响应时间如此之长,以及为什么当你在链中添加haproxy时情况会更糟,因为这两个进程都会受到影响。

事实上,你从haproxy得到了一个503,这意味着它丢失了未能响应健康检查的服务器。这与BTW.的巨大响应时间一致

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

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

在我在你的haproxy配置中看到的其他事情中,全局maxconn是巨大的,没有多大意义,因为你只需要haproxy大约9 GB的RAM就可以达到这个极限。此外,您需要在defaults部分设置一个maxconn值,因为前端的默认值是2000,这可能比您尝试的要低。

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

最新更新