apache中MPM 模块介绍

apache中MPM 模块介绍前言 需要了解进程和线程 底层实现原理 进程 Process 是指正在运行的一个程序实例 它是操作系统分配资源的基本单位 包括内存空间 文件句柄 设备状态等 每个进程都有独立的内存空间 相互之间不会直接访问对方的内存 进程之间通过进程间通信 IPC

大家好,我是讯享网,很高兴认识大家。

前言,需要了解进程和线程(底层实现原理)

进程(Process)是指正在运行的一个程序实例。

它是操作系统分配资源的基本单位,包括内存空间、文件句柄、设备状态等。每个进程都有独立的内存空间,相互之间不会直接访问对方的内存。进程之间通过进程间通信(IPC)来交换数据和通信。

线程(Thread)是进程内的执行单元。

一个进程可以包含多个线程,共享进程的资源。线程与进程共享相同的内存空间,可以直接访问进程内的全局变量和堆内存。线程之间可以通过共享内存来交换数据,而不需要像进程间通信那样显式地进行数据传输。

区别:

资源占用:进程拥有独立的内存空间和资源,而线程共享进程的资源。
调度和切换:进程切换需要保存和恢复整个进程的上下文,开销较大,而线程切换只需要保存和恢复线程的上下文,开销较小。
并发性:多个进程可以并发执行,每个进程都有自己的执行状态和堆栈,互不干扰。线程是进程内的执行单元,多个线程共享相同的进程资源,可以同时执行。

联系:

线程是进程的一部分,线程必须依托于进程的存在。
进程和线程都能够实现并发执行,提高系统资源利用率。
进程间通信和线程间通信都是为了实现数据共享和协作。

总结:

进程是资源分配和调度的基本单位,线程是执行和调度的基本单位。进程是独立的实体,拥有自己的资源,线程是进程内的执行单元,共享进程的资源。线程可以提高程序的并发性和响应性,但需要注意线程之间的同步和互斥问题。

MPM(Multi-Processing Module)

是指在 Apache HTTP Server 中用于处理并发连接和请求的模块。Apache HTTP Server 是一个常用的开源 Web 服务器软件,它采用模块化架构,其中 MPM 是其中一个核心模块。下面是3种MPM的详细介绍

Prefork MPM:

这是默认的 MPM 模式,它使用多个独立的进程来处理客户端请求。每个进程都会预先创建一个子进程池,并从中选取一个子进程来处理每个请求。这种模式比较适合于处理低负载的静态网站,因为每个进程都会占用一定的内存和资源。每个请求都由独立的进程处理,适用于多进程模型,每个进程只处理一个连接,相对稳定但资源占用较高。

Worker MPM:

这种 MPM 模式使用多个并发线程来处理客户端请求。与 Prefork MPM 模式不同的是,Worker MPM 模式中的每个进程会创建多个线程来处理请求。这种模式比 Prefork 更加适合于高负载的动态网站,因为线程可以更快地处理请求,并且对系统资源的利用更加高效。每个请求都由独立的线程处理,适用于多线程模型,多个线程可以共享同一进程的资源,性能较高但稳定性相对较差。

Event MPM:

这种 MPM 模式是基于 Worker MPM 的改进版本,它引入了一种事件驱动的架构来提高性能和稳定性。Event MPM 模式中,每个线程不再阻塞等待请求,而是通过监听套接字来等待请求。当有请求到来时,线程会立即处理请求,并将结果返回给客户端。这种模式也适合于高流量的动态网站。基于 Worker MPM,使用异步 I/O 模型来处理连接和请求,提高并发性能和资源利用率。


讯享网

除了上述几种 MPM 模式外,Apache HTTP 服务器还支持其他一些 MPM 模式,例如 Worker MPM 的多监听器版本、WinNT MPM(用于 Windows 系统)等等。选择合适的 MPM 模式需要考虑很多因素,如应用程序的负载情况、硬件环境和操作系统的特性等等。

查看自己服务器用的是哪一种mpm

下面是代码加图片解释怎么查看
注意下面加()的是我的注释是

(首先查看apache服务器状态) [root@iZrj98mzg10cz2147bly2wZ ~]# systemctl status httpd ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) Active: active (running) since Wed 2023-06-14 09:17:59 CST; 1h 41min ago Docs: man:httpd(8) man:apachectl(8) Main PID: 1458 (httpd) (找到这个pid) Status: "Total requests: 4627; Current requests/sec: 0; Current traffic: 0 B/sec" CGroup: /system.slice/httpd.service ├─1458 /usr/sbin/httpd -DFOREGROUND ├─2223 /usr/sbin/httpd -DFOREGROUND ├─2241 /usr/sbin/httpd -DFOREGROUND ├─2267 /usr/sbin/httpd -DFOREGROUND ├─2269 /usr/sbin/httpd -DFOREGROUND ├─2279 /usr/sbin/httpd -DFOREGROUND ├─2283 /usr/sbin/httpd -DFOREGROUND ├─2307 /usr/sbin/httpd -DFOREGROUND ├─2310 /usr/sbin/httpd -DFOREGROUND ├─2311 /usr/sbin/httpd -DFOREGROUND └─2314 /usr/sbin/httpd -DFOREGROUND Jun 14 09:17:59 iZrj98mzg10cz2147bly2wZ systemd[1]: Starting The Apache HTTP Server... Jun 14 09:17:59 iZrj98mzg10cz2147bly2wZ systemd[1]: Started The Apache HTTP Server. [root@iZrj98mzg10cz2147bly2wZ ~]# cat /proc/1458/cmdline (将这里的pid替换上去) /usr/sbin/httpd-DFOREGROUND[root@iZrj98mzg10cz2147bly2wZ ~]# httpd -V (查看apache的版本号) Server version: Apache/2.4.6 (CentOS) Server built: Mar 24 2022 14:57:57 Server's Module Magic Number: :24 Server loaded: APR 1.4.8, APR-UTIL 1.5.2 Compiled using: APR 1.4.8, APR-UTIL 1.5.2 Architecture: 64-bit Server MPM: prefork (这个就是默认的mpm) 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_SYSVSEM_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="/etc/httpd" -D SUEXEC_BIN="/usr/sbin/suexec" -D DEFAULT_PIDLOG="/run/httpd/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" [root@iZrj98mzg10cz2147bly2wZ ~]#  

讯享网

在这里插入图片描述

将Prefork MPM换成Worker MPM

在00-mpm.conf文件里面

讯享网# Select the MPM module which should be used by uncommenting exactly # one of the following LoadModule lines: # prefork MPM: Implements a non-threaded, pre-forking web server # See: http://httpd.apache.org/docs/2.4/mod/prefork.html #把这个注释掉就行了 #LoadModule mpm_prefork_module modules/mod_mpm_prefork.so # worker MPM: Multi-Processing Module implementing a hybrid # multi-threaded multi-process web server # See: http://httpd.apache.org/docs/2.4/mod/worker.html # 把这个开启 LoadModule mpm_worker_module modules/mod_mpm_worker.so # event MPM: A variant of the worker MPM with the goal of consuming # threads only for connections with active processing # See: http://httpd.apache.org/docs/2.4/mod/event.html # #LoadModule mpm_event_module modules/mod_mpm_event.so 

然后从新启动服务器就可以了

systemctl restart httpd 从新启动的命令 

其他命令

讯享网systemctl reload httpd 从新加载配置文件 httpd -v 小v是查看apache的版本号等 httpd -V 大v是查看MPM使用的是哪个 top 命令查看apache每个进程占用的资源kb为单位 ps aux | grep httpd 查看apache的进程 

注意事项如果你是wordpress或者php这类型的网站

mod_php只在Prefork下来使用,如果你换成Worker 或者是Event 那么你的服务器需要支持PHP-FPM 用他来处理 PHP 请求

查看是否安装了 PHP-FPM php-fpm -v 或者看下/etc/ 这个目录下面有没有php-fpm.conf这个配置文件 

下面是安装PHP-FPM 一些命令

讯享网yum update 更新yum源 yum install php-fpm 下载这个东西 php-fpm -v 查看下载的版本检查是否安装成功 systemctl start php-fpm 启动命令 systemctl status php-fpm 查看状态是否启动成功 systemctl restart php-fpm 从新启动 

在这里插入图片描述
修改httpd下面的php配置文件

# # The following lines prevent .user.ini files from being viewed by Web clients. # <Files ".user.ini"> Require all denied </Files> # # Allow php to handle Multiviews #
AddType text/html .php # # Add index.php to the list of files that will be served as directory # indexes. # DirectoryIndex index.php # # Redirect to local php-fpm (no mod_php in default configuration) # 这个标签里面的东西必须有不然你的php网站就是一片白板 <IfModule !mod_php5.c> <IfModule !mod_php7.c> # Enable http authorization headers SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1 <FilesMatch \.(php|phar)$> SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost" </FilesMatch> </IfModule> </IfModule> # # mod_php is deprecated as FPM is now used by default with httpd in event mode # mod_php is only used when explicitly enabled or httpd switch to prefork mode # # mod_php options # <IfModule mod_php7.c> # # Cause the PHP interpreter to handle files with a .php extension. # <FilesMatch \.(php|phar)$> SetHandler application/x-httpd-php </FilesMatch> # # Uncomment the following lines to allow PHP to pretty-print .phps # files as PHP source code: # #<FilesMatch \.phps$> # SetHandler application/x-httpd-php-source #</FilesMatch> # # Apache specific PHP configuration options # those can be override in each configured vhost # php_value session.save_handler "files" php_value session.save_path "/var/lib/php/session" php_value soap.wsdl_cache_dir "/var/lib/php/wsdlcache" #php_value opcache.file_cache "/var/lib/php/opcache" </IfModule> 
小讯
上一篇 2025-02-10 07:43
下一篇 2025-02-05 17:34

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/20012.html