我的networking服务器(Ubuntu,Apache和Redis服务器)在高峰时间达到100%CPU。 将所有stream量redirect到HTTPS后,CPU使用率会迅速增加。 我们在服务器上使用PHP 5.6,Apache 2.2,Redis服务器和GeoIP。
服务器有足够的内存,只使用非常less的内存。
是否有可能做任何事情来减lessCPU使用率?
top - 11:30:01 up 115 days, 2:48, 1 user, load average: 190.86, 270.08, 159.08 Tasks: 1612 total, 155 running, 1456 sleeping, 0 stopped, 1 zombie %Cpu(s): 75.5 us, 19.3 sy, 0.0 ni, 2.1 id, 1.8 wa, 0.0 hi, 1.2 si, 0.0 st KiB Mem: 61836576 total, 58087948 used, 3748628 free, 1391660 buffers KiB Swap: 0 total, 0 used, 0 free. 36999240 cached Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 106731 www-data 20 0 534768 34936 16644 S 27.5 0.1 0:11.64 /usr/sbin/apache2 -k start 105089 www-data 20 0 536356 36036 16148 S 27.2 0.1 0:06.96 /usr/sbin/apache2 -k start 105942 www-data 20 0 534580 38780 20696 R 22.3 0.1 0:14.38 /usr/sbin/apache2 -k start 106552 www-data 20 0 534516 38404 20364 S 20.3 0.1 0:09.20 /usr/sbin/apache2 -k start 104105 www-data 20 0 538160 40876 19756 R 20.0 0.1 0:16.93 /usr/sbin/apache2 -k start 102426 www-data 20 0 534728 40544 22268 S 19.7 0.1 0:14.81 /usr/sbin/apache2 -k start 106733 www-data 20 0 537724 39960 19292 R 19.7 0.1 0:11.38 /usr/sbin/apache2 -k start
我的SSLconfiguration是:
<VirtualHost *:443> ServerAdmin [email protected] ServerName domain.com ServerAlias www.domain.com DocumentRoot /home/domain/public_html <Directory /home/domain/public_html/> Options -Includes -ExecCGI +FollowSymLinks SSLRequireSSL AllowOverride All Order allow,deny allow from all Require all granted </Directory> SSLEngine on SSLVerifyClient none SSLCertificateFile /etc/apache2/ssl/ssl.cert SSLCertificateKeyFile /etc/apache2/ssl/ssl.key SSLCertificateChainFile /etc/apache2/ssl/sslIntermediate.crt SSLHonorCipherOrder On SSLCipherSuite ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:!RC4:HIGH:!MD5:!aNULL:!EDH:!3DES:!DES:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!MEDIUM SSLProtocol -ALL +TLSv1.1 +TLSv1.2 SSLCompression Off ErrorLog ${APACHE_LOG_DIR}/domain-error.log LogLevel error CustomLog ${APACHE_LOG_DIR}/domain-access.log combined </VirtualHost>
mpm_prefork.conf:
<IfModule mpm_prefork_module> StartServers 50 MinSpareServers 20 MaxSpareServers 20 ServerLimit 1200 MaxClients 1200 #MaxRequestWorkers 800 MaxConnectionsPerChild 1000 </IfModule>
监控系统显示,Apache正在使用更多的CPU,在峰值时间超过1200个Apache进程运行,似乎是达到了极限。 MySQL服务器也越来越负载。
在ELB上安装SSL会解决这个问题吗? 或者任何其他的最佳实践或改变价值将解决我的问题?
是的,将SSL卸载到Amazon Load Balancer是个不错的主意。 encryption/解密是CPU密集型的。 另外你的SSL证书是免费的,自动更新。
看看你的Apache日志文件,并检查您的网站stream量。 如果您看到正常stream量,则可能需要SSL卸载或增加您的实例大小(或两者)。 但是,如果您看到很多stream量不佳(黑客),请考虑添加负载均衡器和防火墙(Amazon WAF)。 我总是为所有网站设置ALB或NLB加WAF。
如果您添加负载平衡器,请确保客户无法通过其IP地址访问您的网站,否则黑客会绕过您的负载平衡器(而不是专门用于扫描IP地址)。 这可以通过将您的网站放置在专用VPC子网内(build议)来完成,也可以指定只允许来自负载平衡器的stream量的安全组条目。
如果您的网站stream量正常,但在某些时间段(通常每天)往往会增加,请考虑增加一个ASG(自动扩展组)来处理繁忙时间内的stream量增长。 这也将为您的网站设置增加更高的可用性。
我build议检查您的安全组,确保所有非必需的端口都被阻止。 如果您允许RDP或SSH,只允许通过您的IP地址访问这些端口,而不是0.0.0.0/0。 只要您的IP地址发生变化,您就可以通过控制台更改此IP地址。
为了减less对你的服务器的调用次数,如果你有很多的静态图像,并且不经常改变,你可以把它添加到你的Apache:
ExpiresActive On ExpiresDefault "access plus 1 week"
或根据您的需要使用ExpiresByType。 我在哪里工作,从死亡的服务器到安静。
此外,MaxConnectionsPerChild到1000是有点小,如果你有一个高stream量的网站。 这意味着每处理1000个请求,客户端就会死亡,并由父节点重新启动。 如果你的Apache是稳定的,那么你可以高得多,避免重新启动进程。