Nginx php-fpm和Memcached的问题

时间:2014-03-28 13:03:41

标签: wordpress nginx memcached php

我有一个网站,过去几个月像往常一样获得更多流量。 我希望这个网站能够在相同的时间内为更多的用户提供服务,而无需更改硬件。 在片刻,我使用Apache2与Wordpress和Memcached。 我想知道我是否可以使用Nginx在这个网站上获得更多性能。 当我使用Wordpress在Web服务器上运行Nginx并且我在60秒内运行10000个用户的测试时,我只得到600个成功的答案,其他9400个连接获得错误。 (大多是超时)。 IMG
当我使用Memcached以前的配置我得到9969成功答案,但每秒最大用户不超过451 IMG
但在我的网站上,我每秒有超过1000个用户。 所以有人能告诉我我做错了什么吗?

系统:
AWS EC2云服务器2GHz,650MB RAM
Ubuntu 13.10
Nginx 1.4.7
Memcached 1.4.14
Php-fpm for php 5.5.3

2 个答案:

答案 0 :(得分:0)

您应该考虑的数字是Avg error rate,您的WP + Nginx + Memcached配置看起来并不太糟糕,所以我认为这是不错的选择。 也许您可以增加-m中的memcached参数以匹配一半的RAM。

BUT: memcached不保证数据在内存中可用,您必须为缓存未命中风暴做好准备。避免风暴的一个有趣的方法是设置一个随机偏移的过期时间,比如10 + [0..10]分钟,这意味着一些项目将存储10,其他项目将存储20分钟(目标是并非所有项目同时到期)。

此外,无论您为memcached分配多少内存,它都只会使用所需的内存,例如它只分配实际使用的内存。 使用-k选项(在您的配置中禁用),整个内存在memcached启动时保留,因此它始终分配全部内存,不是否需要它。

451个连接数实际上可能会有所不同,具体取决于具体情况。在执行基准测试时查看平均值总是一个好主意,即更好地拥有0%Avg error rate451服务客户,而不是65%Avg error rate和8200+服务客户。

但是,为了卸载更多资源,你可以为Wordpress使用额外的缓存,有很多插件,我亲自为此编写了一个。

关于nginx配置,您还可以调整一些参数:

worker_rlimit_nofile 100000;

worker_connections 4000;

# optmized to serve many clients with each thread, essential for linux use epoll;
# accept as many connections as possible,may flood worker connections if set too low
multi_accept on;

# cache informations about FDs, frequently accessed files
# can boost performance, but you need to test those values
open_file_cache max=200000 inactive=20s; 
open_file_cache_valid 30s; 
open_file_cache_min_uses 2;
open_file_cache_errors on;

# to boost IO on HDD we can disable access logs
access_log off;

# copies data between one FD and other from within the kernel
# faster then read() + write()
sendfile on;

# send headers in one peace, its better then sending them one by one 
tcp_nopush on;

# don't buffer data sent, good for small data bursts in real time
tcp_nodelay on;
# number of requests client can make over keep-alive -- for testing
keepalive_requests 100000;

# allow the server to close connection on non responding client, this will free up memory
reset_timedout_connection on;

# request timed out -- default 60
client_body_timeout 10;

# if client stop responding, free up memory -- default 60
send_timeout 2;

# reduce the data that needs to be sent over network
gzip on;
gzip_min_length 10240;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml;
gzip_disable "MSIE [1-6]\.";

答案 1 :(得分:0)

我们遇到的问题不是一个真正的问题。 我们只解释了测试结果错误。

400用户限制不是实际限制,服务器能够使用户保持恒定水平,因为它足够快,可以立即回复所有请求。

测试结果与我的网站不可比,即获得1k用户,因为它拥有比AWS免费实例更好的硬件。 但我认为每秒400个用户对于这样一个“弱”的用户来说是一个非常好的结果。服务器..所以

问题解决了我认为,因为我自己愚蠢地阅读测试结果......

感谢您的帮助,无论如何bodi0。