Board logo

标题: Apache2.4的MPM模式(event/prefork) [打印本页]

作者: admin    时间: 2021-6-25 17:11     标题: Apache2.4的MPM模式(event/prefork)

笺注:这是在 CentOS8_lnmp1.7_LAMP 的基础上进行的。 查看Apache的版本: [root@centos8 ~]# httpd -v -bash: httpd: 未找到命令 [root@centos8 ~]# find / -name httpd /etc/rc.d/init.d/httpd /usr/local/apache/bin/httpd 做个软链接: [root@centos8 ~]# ln -s /usr/local/apache/bin/httpd /usr/sbin [root@centos8 ~]# [root@centos8 ~]# httpd -v Server version: Apache/2.4.46 (Unix) Server built: Feb 27 2021 18:34:26 操作系统的“进程最大可打开文件数”的查询方法: [root@centos8 ~]# ulimit -n 65535 查看Apache当前使用的MPM模式:(默认就是使用event) [root@centos8 ~]# httpd -V Server version: Apache/2.4.46 (Unix) Server built: Feb 27 2021 18:34:26 Server's Module Magic Number: 20120211:93 Server loaded: APR 1.7.0, APR-UTIL 1.6.1 Compiled using: APR 1.7.0, APR-UTIL 1.6.1 Architecture: 64-bit Server MPM: event threaded: yes (fixed thread count) forked: yes (variable process count) Server compiled with.... -D APR_HAS_SENDFILE -D APR_HAS_MMAP -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled) -D APR_USE_PROC_PTHREAD_SERIALIZE -D APR_USE_PTHREAD_SERIALIZE -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT -D APR_HAS_OTHER_CHILD -D AP_HAVE_RELIABLE_PIPED_LOGS -D DYNAMIC_MODULE_LIMIT=256 -D HTTPD_ROOT="/usr/local/apache" -D SUEXEC_BIN="/usr/local/apache/bin/suexec" -D DEFAULT_PIDLOG="logs/httpd.pid" -D DEFAULT_SCOREBOARD="logs/apache_runtime_status" -D DEFAULT_ERRORLOG="logs/error_log" -D AP_TYPES_CONFIG_FILE="conf/mime.types" -D SERVER_CONFIG_FILE="conf/httpd.conf" Apache的主配置文件: [root@centos8 ~]# find / -name "httpd.conf" /usr/local/apache/conf/original/httpd.conf /usr/local/apache/conf/httpd.conf 默认就是使用event的so文件: [root@centos8 ~]# cat /usr/local/apache/conf/httpd.conf |grep 'mpm_' #LoadModule mpm_worker_module modules/mod_mpm_worker.so LoadModule mpm_event_module modules/mod_mpm_event.so #LoadModule mpm_prefork_module modules/mod_mpm_prefork.so 查找MPM模式的配置文件: [root@centos8 ~]# cat /usr/local/apache/conf/httpd.conf |grep "httpd-mpm.conf" Include conf/extra/httpd-mpm.conf MPM模式的配置文件: [root@centos8 ~]# vi /usr/local/apache/conf/extra/httpd-mpm.conf event MPM: 图片1.png 测试: [root@centos8 ~]# ab -bash: ab: 未找到命令 [root@centos8 ~]# yum -y install httpd-tools [root@centos8 ~]# ab -n 1000 -c 400 http://127.0.0.1/p.php #指定并发请求数为400,总请求数为1000,对http://127.0.0.1/p.php进行压力测试 This is ApacheBench, Version 2.3 <$Revision: 1843412 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 127.0.0.1 (be patient) Completed 100 requests Completed 200 requests Completed 300 requests Completed 400 requests Completed 500 requests Completed 600 requests Completed 700 requests Completed 800 requests Completed 900 requests Completed 1000 requests Finished 1000 requests Server Software: Apache Server Hostname: 127.0.0.1 Server Port: 80 Document Path: /p.php Document Length: 21174 bytes Concurrency Level: 400 Time taken for tests: 1.970 seconds Complete requests: 1000 Failed requests: 999 (Connect: 0, Receive: 0, Length: 999, Exceptions: 0) Total transferred: 21392939 bytes HTML transferred: 21186939 bytes Requests per second: 507.66 [#/sec] (mean) Time per request: 787.925 [ms] (mean) Time per request: 1.970 [ms] (mean, across all concurrent requests) Transfer rate: 10605.86 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 185 364.6 11 1077 Processing: 88 373 227.9 307 1363 Waiting: 2 371 228.6 304 1362 Total: 95 558 492.2 387 1761 Percentage of the requests served within a certain time (ms) 50% 387 66% 454 75% 551 80% 725 90% 1670 95% 1708 98% 1742 99% 1758 100% 1761 (longest request) 笺注:可以看到每秒最大处理请求次数为507.66次,每个请求响应时间是1.970毫秒。 ### 加大并发请求数、总请求数进行测试:(并发请求数为1000,总请求数为3000) [root@centos8 ~]# ab -n 3000 -c 1000 http://127.0.0.1/p.php This is ApacheBench, Version 2.3 <$Revision: 1843412 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 127.0.0.1 (be patient) Completed 300 requests Completed 600 requests Completed 900 requests Completed 1200 requests Completed 1500 requests Completed 1800 requests Completed 2100 requests Completed 2400 requests Completed 2700 requests Completed 3000 requests Finished 3000 requests Server Software: Apache Server Hostname: 127.0.0.1 Server Port: 80 Document Path: /p.php Document Length: 21187 bytes Concurrency Level: 1000 Time taken for tests: 19.255 seconds Complete requests: 3000 Failed requests: 2443 (Connect: 0, Receive: 0, Length: 2443, Exceptions: 0) Total transferred: 64182690 bytes HTML transferred: 63564690 bytes Requests per second: 155.80 [#/sec] (mean) Time per request: 6418.342 [ms] (mean) Time per request: 6.418 [ms] (mean, across all concurrent requests) Transfer rate: 3255.17 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 418 939.8 109 3738 Processing: 45 1549 3471.4 452 19213 Waiting: 2 1545 3472.2 448 19213 Total: 45 1968 3482.6 608 19229 Percentage of the requests served within a certain time (ms) 50% 608 66% 722 75% 1355 80% 1893 90% 4623 95% 9580 98% 19217 99% 19217 100% 19229 (longest request) 笺注:可以看到每秒最大处理请求次数为155.80次,每个请求响应时间是6.418毫秒。 ### 加大并发请求数、总请求数进行测试:(并发请求数为2000,总请求数为3000) [root@centos8 ~]# ab -n 3000 -c 2000 http://127.0.0.1/p.php This is ApacheBench, Version 2.3 <$Revision: 1843412 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 127.0.0.1 (be patient) Completed 300 requests Completed 600 requests Completed 900 requests Completed 1200 requests Completed 1500 requests Completed 1800 requests Completed 2100 requests Completed 2400 requests Completed 2700 requests apr_socket_recv: Connection reset by peer (104) Total of 2865 requests completed 修改event MPM的参数值: [root@centos8 ~]# vi /usr/local/apache/conf/extra/httpd-mpm.conf StartServers 6 MinSpareThreads 16 MaxSpareThreads 1024 ThreadsPerChild 128 ServerLimit 128 MaxRequestWorkers 16384 MaxConnectionsPerChild 10000 如下图: 图片2.png 注释: StartServers #默认启动的进程数 MinSpareThreads #最小线程数 MaxSpareThreads #最大线程数 ThreadsPerChild #最大子线程数 ServerLimit #最大进程数 MaxRequestWorkers #最大子进程数,即最大并发连接数,超过的连接请求将排队等候处理;当并发连接数超过了系统的承受能力时,系统会卡死。 MaxConnectionsPerChild #进程生命周期内,处理的最大请求数目。达到该数目后,进程将死掉。如果设置为0,表示没有限制。该参数的意义在于,避免了可能存在的内存泄露问题。 优化的计算公式: MaxSpareThreads > StartServers * ThreadsPerChild MaxRequestWorkers = ServerLimit * ThreadsPerChild 重启服务器: [root@centos8 ~]# reboot ### 加大并发请求数、总请求数进行测试:(并发请求数为2000,总请求数为3000) [root@centos8 ~]# ab -n 3000 -c 2000 http://127.0.0.1/p.php This is ApacheBench, Version 2.3 <$Revision: 1843412 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 127.0.0.1 (be patient) Completed 300 requests Completed 600 requests Completed 900 requests Completed 1200 requests Completed 1500 requests Completed 1800 requests Completed 2100 requests Completed 2400 requests Completed 2700 requests Completed 3000 requests Finished 3000 requests Server Software: Apache Server Hostname: 127.0.0.1 Server Port: 80 Document Path: /p.php Document Length: 21173 bytes Concurrency Level: 2000 Time taken for tests: 26.959 seconds Complete requests: 3000 Failed requests: 2999 (Connect: 0, Receive: 0, Length: 2999, Exceptions: 0) Total transferred: 64179692 bytes HTML transferred: 63561692 bytes Requests per second: 111.28 [#/sec] (mean) Time per request: 17972.804 [ms] (mean) Time per request: 8.986 [ms] (mean, across all concurrent requests) Transfer rate: 2324.83 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 1100 1406.6 225 3909 Processing: 23 2534 3999.8 1258 26881 Waiting: 7 2382 4024.4 1254 26881 Total: 79 3634 3876.9 2419 26922 Percentage of the requests served within a certain time (ms) 50% 2419 66% 3951 75% 4698 80% 5169 90% 7069 95% 13770 98% 14128 99% 22274 100% 26922 (longest request) 笺注:可以看到每秒最大处理请求次数为111.28次,每个请求响应时间是8.986毫秒。 ### 加大并发请求数、总请求数进行测试:(并发请求数为3001,总请求数为4000) [root@centos8 ~]# ab -n 4000 -c 3001 http://127.0.0.1/p.php This is ApacheBench, Version 2.3 <$Revision: 1843412 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 127.0.0.1 (be patient) Completed 400 requests Completed 800 requests Completed 1200 requests Completed 1600 requests Completed 2000 requests Completed 2400 requests Completed 2800 requests Completed 3200 requests Completed 3600 requests Completed 4000 requests Finished 4000 requests Server Software: Apache Server Hostname: 127.0.0.1 Server Port: 80 Document Path: /p.php Document Length: 21177 bytes Concurrency Level: 3001 Time taken for tests: 40.682 seconds Complete requests: 4000 Failed requests: 3999 (Connect: 0, Receive: 0, Length: 3999, Exceptions: 0) Total transferred: 85583662 bytes HTML transferred: 84759662 bytes Requests per second: 98.32 [#/sec] (mean) Time per request: 30521.983 [ms] (mean) Time per request: 10.171 [ms] (mean, across all concurrent requests) Transfer rate: 2054.40 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 1364 1366.1 1450 3525 Processing: 233 5006 7363.1 2196 39136 Waiting: 6 4853 7414.4 1964 39136 Total: 243 6371 7623.4 4199 40597 Percentage of the requests served within a certain time (ms) 50% 4199 66% 6625 75% 7486 80% 8589 90% 14085 95% 21252 98% 40517 99% 40587 100% 40597 (longest request) 笺注:可以看到每秒最大处理请求次数为98.32次,每个请求响应时间是10.171毫秒。 ### 加大并发请求数、总请求数进行测试:(并发请求数为5001,总请求数为8000) [root@centos8 ~]# ab -n 8000 -c 5001 http://127.0.0.1/p.php This is ApacheBench, Version 2.3 <$Revision: 1843412 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 127.0.0.1 (be patient) Completed 800 requests Completed 1600 requests Completed 2400 requests Completed 3200 requests Completed 4000 requests Completed 4800 requests Completed 5600 requests Completed 6400 requests Completed 7200 requests apr_pollset_poll: The timeout specified has expired (70007) Total of 7655 requests completed 笺注:Apache的最大并发连接数也受服务器性能的限制。 ############ 修改Apache的主配置文件,使用prefork的so文件: [root@centos8 ~]# cat /usr/local/apache/conf/httpd.conf |grep 'mpm_' #LoadModule mpm_worker_module modules/mod_mpm_worker.so #LoadModule mpm_event_module modules/mod_mpm_event.so LoadModule mpm_prefork_module modules/mod_mpm_prefork.so 重启Apache: [root@centos8 ~]# systemctl restart httpd 查看Apache当前使用的MPM模式:(现在使用prefork) [root@centos8 ~]# httpd -V Server version: Apache/2.4.46 (Unix) Server built: Feb 27 2021 18:34:26 Server's Module Magic Number: 20120211:93 Server loaded: APR 1.7.0, APR-UTIL 1.6.1 Compiled using: APR 1.7.0, APR-UTIL 1.6.1 Architecture: 64-bit Server MPM: prefork threaded: no forked: yes (variable process count) Server compiled with.... -D APR_HAS_SENDFILE -D APR_HAS_MMAP -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled) -D APR_USE_PROC_PTHREAD_SERIALIZE -D APR_USE_PTHREAD_SERIALIZE -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT -D APR_HAS_OTHER_CHILD -D AP_HAVE_RELIABLE_PIPED_LOGS -D DYNAMIC_MODULE_LIMIT=256 -D HTTPD_ROOT="/usr/local/apache" -D SUEXEC_BIN="/usr/local/apache/bin/suexec" -D DEFAULT_PIDLOG="logs/httpd.pid" -D DEFAULT_SCOREBOARD="logs/apache_runtime_status" -D DEFAULT_ERRORLOG="logs/error_log" -D AP_TYPES_CONFIG_FILE="conf/mime.types" -D SERVER_CONFIG_FILE="conf/httpd.conf" MPM模式的配置文件: [root@centos8 ~]# vi /usr/local/apache/conf/extra/httpd-mpm.conf prefork MPM: 图片3.png 测试:(并发请求数为200,总请求数为1000) [root@centos8 ~]# ab -n 1000 -c 200 http://127.0.0.1/p.php This is ApacheBench, Version 2.3 <$Revision: 1843412 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 127.0.0.1 (be patient) Completed 100 requests Completed 200 requests Completed 300 requests Completed 400 requests Completed 500 requests Completed 600 requests Completed 700 requests Completed 800 requests Completed 900 requests Completed 1000 requests Finished 1000 requests Server Software: Apache Server Hostname: 127.0.0.1 Server Port: 80 Document Path: /p.php Document Length: 21196 bytes Concurrency Level: 200 Time taken for tests: 13.495 seconds Complete requests: 1000 Failed requests: 618 (Connect: 0, Receive: 0, Length: 618, Exceptions: 0) Total transferred: 21400808 bytes HTML transferred: 21194808 bytes Requests per second: 74.10 [#/sec] (mean) Time per request: 2698.912 [ms] (mean) Time per request: 13.495 [ms] (mean, across all concurrent requests) Transfer rate: 1548.72 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 3 47.1 0 1060 Processing: 14 1109 3355.4 209 13480 Waiting: 4 1109 3355.4 209 13480 Total: 15 1112 3356.5 209 13485 Percentage of the requests served within a certain time (ms) 50% 209 66% 210 75% 212 80% 213 90% 215 95% 13410 98% 13456 99% 13471 100% 13485 (longest request) 笺注:可以看到每秒最大处理请求次数为74.10次,每个请求响应时间是13.495毫秒。 ### 加大并发请求数、总请求数进行测试:(并发请求数为1001,总请求数为2000) [root@centos8 ~]# ab -n 2000 -c 1001 http://127.0.0.1/p.php This is ApacheBench, Version 2.3 <$Revision: 1843412 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 127.0.0.1 (be patient) Completed 200 requests Completed 400 requests Completed 600 requests Completed 800 requests Completed 1000 requests Completed 1200 requests Completed 1400 requests Completed 1600 requests Completed 1800 requests Completed 2000 requests Finished 2000 requests Server Software: Apache Server Hostname: 127.0.0.1 Server Port: 80 Document Path: /p.php Document Length: 21195 bytes Concurrency Level: 1001 Time taken for tests: 30.733 seconds Complete requests: 2000 Failed requests: 1572 (Connect: 0, Receive: 0, Length: 1572, Exceptions: 0) Total transferred: 42803570 bytes HTML transferred: 42391570 bytes Requests per second: 65.08 [#/sec] (mean) Time per request: 15381.783 [ms] (mean) Time per request: 15.366 [ms] (mean, across all concurrent requests) Transfer rate: 1360.12 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 398 511.0 17 1072 Processing: 12 4988 9080.3 224 30707 Waiting: 2 4987 9080.3 224 30707 Total: 28 5385 9221.3 225 30726 Percentage of the requests served within a certain time (ms) 50% 225 66% 2902 75% 4659 80% 7922 90% 27967 95% 30577 98% 30667 99% 30697 100% 30726 (longest request) 笺注:可以看到每秒最大处理请求次数为65.08次,每个请求响应时间是15.366毫秒。 ### 加大并发请求数、总请求数进行测试:(并发请求数为2001,总请求数为3000) [root@centos8 ~]# ab -n 3000 -c 2001 http://127.0.0.1/p.php This is ApacheBench, Version 2.3 <$Revision: 1843412 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 127.0.0.1 (be patient) Completed 300 requests Completed 600 requests Completed 900 requests Completed 1200 requests Completed 1500 requests Completed 1800 requests Completed 2100 requests Completed 2400 requests apr_pollset_poll: The timeout specified has expired (70007) Total of 2416 requests completed 结论: 与Apache的MPM模式prefork相比,Apache的MPM模式event对高并发的支持更好。 相关文章: Apache2.4的MPM模式(event) Apache2.4的MPM模式(prefork)

图片附件: 图片1.png (2021-7-12 01:24, 57.19 KB) / 下载次数 116
http://blog.zhuohua.store/attachment.php?aid=18504&k=1f8b7bbb2bfb3acfa54378a9152291b5&t=1714567687&sid=v0sUF8



图片附件: 图片2.png (2021-7-12 01:27, 65.72 KB) / 下载次数 110
http://blog.zhuohua.store/attachment.php?aid=18505&k=d37b2e16bd2805db3f4bed0ab9a27e2c&t=1714567687&sid=v0sUF8



图片附件: 图片3.png (2021-7-12 01:31, 48.46 KB) / 下载次数 49
http://blog.zhuohua.store/attachment.php?aid=18506&k=112215cdac108ca38c2b8d16d1b606bc&t=1714567687&sid=v0sUF8






欢迎光临 blog.zhuohua.store (http://blog.zhuohua.store/) Powered by Discuz! 7.2