我的服务器与DigitalOcean的计划如下:
2 Core Processor 2 GB Memory
我的网站正在接受成千上万的访问者,但是,两个CPU核心都是@ 100%:
这个问题似乎与php-fpm和nginx: worker process 。 我已经对服务器做了很多优化,但是我仍然无法让它冷静下来。
这是我的nginx.conf :
user www-data; worker_processes 2; pid /run/nginx.pid; events { worker_connections 2048; # multi_accept on; } http { ## # Basic Settings ## sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; server_tokens off; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # server_names_hash_bucket_size 64; # server_name_in_redirect off; include /etc/nginx/mime.types; default_type application/octet-stream; ## # Logging Settings ## access_log off; error_log /var/log/nginx/error.log; ## # Gzip Settings ## gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied expired no-cache no-store private auth; gzip_comp_level 2; gzip_min_length 1000; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; ## # Buffers ## client_body_buffer_size 10K; client_header_buffer_size 1k; client_max_body_size 8m; large_client_header_buffers 2 1k; ## # nginx-naxsi config ## # Uncomment it if you installed nginx-naxsi ## #include /etc/nginx/naxsi_core.rules; ## # nginx-passenger config ## # Uncomment it if you installed nginx-passenger ## #passenger_root /usr; #passenger_ruby /usr/bin/ruby; ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
以下是我在php-fpm的www.conf启用的选项:
user = www-data group = www-data listen = /var/run/php5-fpm.sock listen.owner = www-data listen.group = www-data pm = ondemand pm.max_children = 20 pm.start_servers = 2 pm.min_spare_servers = 1 pm.process_idle_timeout = 10s; pm.max_requests = 500 request_terminate_timeout = 20
我如何让我的服务器超载? 我还能改变什么?
就CPU使用率和RAM而言,运行PHP是很昂贵的。 任何时候你都可以避免调用PHP解释器。 caching是您执行此操作的主要方式,只要内容不是为每个用户自定义生成的。
我的小AWS t2.micro可以从Nginxcaching每秒大约2500页,但如果PHP(HHVM)必须被调用,则每秒大约20页。 这种caching减less了我的每月账单,因为如果我必须为每个用户生成页面,我需要一个更强大的实例大小,这会花费更多。
微型快速存储是一个适用于快速变化的网站的好select。 caching1秒钟可以有很大的好处。 当然如果你的网站正在慢慢变化,caching时间会进一步减lessCPU的负载。
另一种select包括: – 运行更高效的PHP解释器 – PHP7或HHVM – 优化您的PHP代码 – 运行CDN。 这可以轻松地卸载静态资源,并且如果您正确地设置页面标题(到期时间和caching状态)和CDN,它可以直接提供页面。 我使用CloudFlare和一个Page Rule来告诉它“Cache Everything”,包括HTML(由PHP生成)。 为用户提供更快的网站,减less了CPU和带宽使用,CloudFlare有一个适合许多人的免费计划。
您可以使用其他caching系统,例如Varnish,它经常与HAProxy一起用于负载平衡。 这两种产品之间有一些交叉 – HAProxy可以做一些caching,Varnish可以做一些负载平衡。 更多关于他们的信息 。