php-fpmod事件在https服务器centos7,php7.2上缓慢发生



我有服务器centos 7,安装了php7.2,mod ssl,php fpm与mpm事件一起运行。所以在配置完成之后,我使用cmd进行了测试
ab -k -c 100 -n 2000 http://myweb.com/test.php
结果:
并发级别:100
测试所用时间:0.103秒
完成请求:2000
失败请求:2
(连接:0,接收:0,长度:2,异常:0)
写入错误:0
非-2xx响应:1998
保持活动请求:1998
传输的总字节数:1048596字节
HTML传输:467752字节
每秒请求数:19506.11[#/sec](平均值)
每个请求的时间:5.127[ms](平均值14
99%15
100%27(最长请求)

当我用链接https 测试它时,它很快但很慢

ab -k -c 100 -n 2000 https://myweb.com/test.php
结果:
并发级别:100
测试所用时间:3.831秒
完成请求:2000
失败请求:0
写入错误:0
保持活动请求:0
传输的总字节数:460000字节
HTML传输的字节数:58000字节
每秒请求数:522.05[#/sec](平均值)
每个请求的时间:191.553[ms](平均值
每个请求的时间:1.916[毫秒](所有并发请求的平均值)
传输速率:117.26[千字节/秒]已接收
在特定时间内服务的请求百分比(毫秒)
50%182
66%191
75%199
80%207
90%228
95%247
98%266
99%285
100%328(最长请求)

我的服务器上一切都还可以,我检查了error_log,但没有上面这个问题的日志,所以我不知道原因和如何解决它,
我用apache-hander在服务器ssl上添加了更多的案例测试,它很快,我认为用FPM/FastCGI的服务器比服务器apache处理程序更快

并发级别:100
测试所用时间:0.612秒
完成请求:2000
失败请求:0
写入错误:0传输总数:573427字节
HTML传输:60000字节
requests:3270.41[#/sec](平均值)
每个请求的时间:30.577[ms](平均值0.306[毫秒](所有并发请求的平均值)
传输速率:915.69[千字节/秒]已接收
在特定时间内服务的请求百分比(毫秒)
50%2
66%3
75%3
80%4
90%5
95%7
98%12
99%65
100%584(最长请求)

请帮帮我,谢谢

@unixmiah是正确的。区别在于关于ssl的所有——尽管实际的加密不是开销——而是密钥协商和ssl终止的配置导致了问题。

您已经在上面发布了3组结果——前两组显示了您使用的命令——在http和https上进行测试,但您还没有提供用于第三组的命令。

在第一组结果中:

Keep-Alive requests: 1998

在第二组结果中:

Keep-Alive requests: 0

即使您在命令行上指定了-k(enable keep-alive)

没有保持活动请求的最可能原因是,您的Web服务器被配置为在无法确定客户端是否支持SSL会话重新协商时关闭连接(即MSIE<=6)。因此,您不仅在每个请求之前有TCP握手(2.5 rtts)的开销,而且每个请求都有一个完整的ssl协商(约3-4 rtts)。让你的测试设备正确表示真实浏览器交互的最快方法是伪造ab:发送的用户代理

ab -k -c 100 -n 2000 
-H "User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" 
https://myweb.com/test.php

(我还没有测试过这一点——我假设您的ab版本能够处理ssl重新协商,或者测试时间足够短,不会出现问题,并且您的Web服务器没有实现HTTP/2)。

你问题的题目很误导人。无论请求是通过HTTP还是HTTPS发送到Web服务器,对PHP的性能都没有影响——它总是以相同的方式到达PHP。如果您使用Web服务器提供的静态内容进行测试,您会看到相同的性能模式。

@symcbean,这是我的ssl文件

侦听443 https
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl pass-dialog
ssl会话缓存shmcb:/run/httpd/sslcache(512000警告
SSLEngine on
SSL协议all-SSLv2-SSLv3
SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!种子:!IDEA
SSLCertificateFile/etc/pki/tls/certs/localhost.crt
ssl证书密钥文件/etc/pki/tls/private/localhost.key
SSLOptions+SStdEnvVars
SSLOptions+StdEnvVars
BrowserMatch"MSIE[2-5]"\nokeepalive ssl不干净关闭\降级1.0强制响应-1.0
CustomLog logs/ssl_request_log\"%t%h%{SSL_PROTOCOL}x%{SSL_CIPHER}x\"%r\"%b">
/VirtualHost

VirtualHost*:443
SSLEngine打开
SSLCertificateFile/etc/httpd/ssl/exp.crt
ssl证书密钥文件/etc/httpd/ssl/exp.key
SSLCACertificateFile/etc/httpd/ssl/exp.crt
ServerName example.com
DocumentRoot/var/www/html/web/
FilesMatch.(php|phar)$
SetHandler"代理:fcgi://127.0.0.1:9000">
/FilesMatch
/VirtualHost

@symcbean谢谢,正是我的问题,我不知道为什么http可以运行keepalive,但https不能工作keepalive尽管我在httpd.conf中配置了keepalive On,并为两者运行相同的cmd:

ab -k -c 100 -n 2000 -H "User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" http://exp.com/test.php
=>每秒6000个请求以上,2000个保持活动请求

ab -k -c 100 -n 2000 -H "User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" https://exp.com/test.php
=>每秒大约600个请求,0个保持活动请求
但当我使用https://example.com,我看到响应标头有:Connection→保持活力,保持活力→timeout=10,max=150
哈哈,我很喜欢

最新更新