Tuning nginx on EC2
Chetan Sarva
csarva at gmail.com
Wed Dec 22 19:32:16 MSK 2010
For the record, it turns out that the limiting factor is the
throughput of the virtual NIC itself. Specifically, it can push a max
of about 100k packets/sec. Without some improvements in that area, it
seems the max requests possible on a standard ec2 instance is about
12k/sec (a 10gbps instance can actually do about double that number).
On Sun, Dec 12, 2010 at 5:28 AM, <slogster at gmail.com> wrote:
> At Sat, 11 Dec 2010 11:53:17 -0500,
> Chetan Sarva wrote:
>>
>> On Sat, Dec 11, 2010 at 9:12 AM, Dennis Jacobfeuerborn
>> <dennisml at conversis.de> wrote:
>>
>> > I don't have any direct experience with services like EC2 but remember that
>> > before the traffic hits your machine it first has to pass through various
>> > routers and switches in Amazons infrastructure that is shared between
>> > probably millions of EC2 instances. You might either hit a bottleneck on
>> > these shared components or maybe Amazon just has put some limitations in
>> > place to prevent abuse.
>>
>> With shared resources you would expect to see a range of throughput
>> numbers from when resources are constrained and when they are not. On
>> EC2, disk & network I/O is a shared resource and both can be measured.
>> I've done raw network throughput tests and they confirm this. With my
>> nginx tests (and, to be fair, other webservers as well), I
>> consistently get around 12k reqs/sec.
>>
>> _______________________________________________
>> nginx mailing list
>> nginx at nginx.org
>> http://nginx.org/mailman/listinfo/nginx
>
> There are some things you have to consider, when doing network benchmarks:
> 1) bandwidth (as you were told) - you can test with iperf
> 2) rtt
> 3) statefull firewall (statefull NAT goes in here too) - big penalty especially when every new request is a new connection and you are using keepalive
> 4) OS max and per nginx process limits for file descriptors
> 5) network buffers
> 6) polling
> 7) backlog
> 8) tcp fin timeout
> 9) nginx number of processes
> 10) nginx backlog per socket
> 11) nginx regexp in locations, ifs and so on...
> 12) nginx keepalive? this is important when you are benchmarking req/s, becase a) 3 way tcp handshake takes some time, closing connections too, b) requests cannot be parallelized per connection
>
> good luck with benchmarking :)
>
> _______________________________________________
> nginx mailing list
> nginx at nginx.org
> http://nginx.org/mailman/listinfo/nginx
>
More information about the nginx
mailing list