我在Linode上有Linode 768mb RAM服务器。 而我有WordPress的博客。 在我的服务器上安装了ubuntu,nginx作为前端,apache2作为后端。 我有APC和memcache模块。 有时站点崩溃。 但服务器的CPU使用率低于临界水平(最高只有60-70)。 但是,在网站崩溃,我可以看到硬盘I / O使用的关键级别。 我读过,这可能是有关MySQL的不正确的设置。
我的nginx.conf:
worker_processes 2; events { worker_connections 1024; # multi_accept on; } http { sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 12; tcp_nodelay on; gzip on; gzip_disable "MSIE [1-6]\.(?!.*SV1)";
我的nginx proxy.conf:
proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 128k; #client_header_buffer_size 64k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 16k; proxy_buffers 32 16k; proxy_busy_buffers_size 64k;
我的nginx网站conf:
server { listen 80; server_name mysite.org; location / { proxy_pass http://127.0.0.1:8080; include /etc/nginx/conf.d/proxy.conf; root /home/mysite/www/; index index.html index.htm index.php; } location ~* ^.+\.(jpg|jpeg|cur|flv|avi|gif|png|ico|zip|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf)$ { root /home/mysite/www/; } location ~* ^.+\.(htm|html|js|htc|css|tgz|gz|rar|bz2)$ { root /home/mysite/www/; gzip_static on; }
在my.cnf
# # * Fine Tuning # key_buffer = 16M max_allowed_packet = 16M thread_stack = 192K thread_cache_size = 8 # This replaces the startup script and checks MyISAM tables if needed # the first time they are touched myisam-recover = BACKUP #max_connections = 100 #table_cache = 64 #thread_concurrency = 10 # # * Query Cache Configuration # query_cache_limit = 1M query_cache_size = 16M
硬件:
cpu (4x): Intel(R) Xeon(R) CPU L5520 @ 2.27GHz, 2260 MHz storage: Xen Virtual Storage 0, Xen Virtual Storage 1 memory: 768mb
Apache conf:
KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 15 <IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0 </IfModule> <IfModule mpm_worker_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxClients 150 MaxRequestsPerChild 0 </IfModule> <IfModule mpm_event_module> StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule>
Linode统计信息链接: http : //ridna.ua/temp/mysite_io_rate.png和http://ridna.ua/temp/mysite_cpu_rate.png
如何优化我的nginx + apache2 + mysql设置以避免网站崩溃? 谢谢..
我有这些问题,并修正了一些调整在Apache和MySQL
nginx中的“upstream timed out”错误
要么
INFO:task:apache2(或者mysql或者nginx)被阻塞超过120秒。
当你的apache资源使用率太高而不可用时,这个问题就会发生。 如果MySQL不会回复快,并延迟对查询的答复阿帕奇将增加他的脚步和你的记忆将充满… … BoooOOM
你的主要问题是从MYSQL和解决它的一个简单的方法是安装mysqltuner应用程序,并做的build议
你将需要在第二步调整你的Apache! 首先使用“顶部”或类似的东西(在服务器上的交通繁忙),并find最大的活跃线程的Apache大小在MB。 现在你必须通过configurationMaxClients把其余的免费服务器内存到Apache
例如,如果你的内存是12,你的MySQL提取了5GB内存 – 而你的最大apache花费大约是70mb,那么你必须将你的MaxClients设置为70〜80左右,让剩下的内存用于操作系统。 它非常重要,你configuration你的服务一样好,他们没有充分的stream量所有的可用内存!
您需要确定磁盘I / O的实际原因,而不是仅仅猜测它。 第一步是使用sar收集的历史数据(如果你没有在你的机器上安装sysstat ,并调整它以便每分钟收集一次数据,现在就这样做)。 首先寻找交换; 使用的音量和页面input/输出都可能是有用的。
如果交换不是这种情况,请仔细检查哪个块设备存在磁盘I / O问题。 如果您有多个分区,这将有助于缩小系统的哪一部分可能导致磁盘I / O。
如果您能够在问题中发现问题,运行iotop可以帮助确定违规stream程。 不利的一面是,以非交互方式运行它是一种有害生物,因为要获得有用的数据,您实际上需要每秒进行一次轮询,将所有数据写入磁盘可能会导致足够的磁盘I / O,从而使您的机器更快速地进入水下。
一旦你确定谁是罪犯,你需要修复它。 如果MySQL确实是罪魁祸首,那么是的,你需要调整它。 我不打算详细介绍MySQL调优,因为互联网(和本站)已经充满了它们。 只要说,是的,默认的MySQL参数是完全废话,你总是需要调整你的数据库。
在你的设置几个一般的观点: