zoukankan      html  css  js  c++  java
  • 第十五周作业

    1、写出 MPM multi-processing module 工作模式原理以及区别
    prefork:多进程I/O模型,每个进程响应一个请求,CentOS 7 默认模型 一个主进程:生成和回收n个子进程,创建套接字,不响应请求 多个子进程:工作 work进程,每个子进程处理一个请求;系统初始时,预先生成多个空闲进程,等待请求
    Prefork MPM: 预派生模式,有一个主控制进程,然后生成多个子进程,每个子进程有一个独立的线程响应用户请求,相对比较占用内存,但是比较稳定,可以设置最大和最小进程数,是最古老的一种模式,也是最稳定的模式,适用于访问量不是很大的场景
    优点:稳定

    缺点:慢,占用资源,不适用于高并发场景

    worker:复用的多进程I/O模型,多进程多线程,IIS使用此模型 一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求:m*n
    worker MPM:是一种多进程和多线程混合的模型,有一个控制进程,启动多个子进程,每个子进程里面包含固定的线程,使用线程程来处理请求,当线程不够使用的时候会再启动一个新的子进程,然后在进程里面再启动线程处理请求,由于其使用了线程处理请求,因此可以承受更高的并发。
    优点:相比prefork 占用的内存较少,可以同时处理更多的请求
    缺点:使用keep-alive的长连接方式,某个线程会一直被占据,即使没有传输数据,也需要一直等待到超时才会被释放。如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用。(该问题在prefork模式下,同样会发生)


    event:事件驱动模型(worker模型的变种),CentOS8 默认模型
    一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求:m*n,有专门的监控线程来管理这些keep-alive类型的线程,当有真实请求时,将请求传递给服务线程,执行完毕后,又允许释放。这样增强了高并发场景下的请求处理能力
    uevent MPM:Apache中最新的模式,属于事件驱动模型(epoll),每个进程响应多个请求,在现在版本里的已经是稳定可用的模式。它和worker模式很像,最大的区别在于,它解决了keep-alive场景下,长期被占用的线程的资源浪费问题(某些线程因为被keep-alive,空挂在哪里等待,中间几乎没有请求过来,甚至等到超时)。event MPM中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样增强了高并发场景下的请求处理能力
    event只在有数据发送的时候才开始建立连接,连接请求才会触发工作线程,即使用了TCP的一个选项,叫做延迟接受连接TCP_DEFER_ACCEPT,加了这个选项后,若客户端只进行TCP连接,不发送请求,则不会触发Accept操作,也就不会触发工作线程去干活,进行了简单的防攻击(TCP连接)
    优点:单线程响应多请求,占据更少的内存,高并发下表现更优秀,会有一个专门的线程来管理keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放
    缺点:没有线程安全控制


    2、编译安装httpd 2.4

    #! /bin/bash

    # 安装相关包
    yum -y install wget gcc make pcre-devel openssl-devel expat-devel

    # 下载源代码并解压缩
    wget -P /usr/local/src/ https://mirror.bit.edu.cn/apache//apr/apr-1.7.0.tar.gz
    wget -P /usr/local/src/ https://mirror.bit.edu.cn/apache//apr/apr-util-1.6.1.tar.gz
    wget -P /usr/local/src/ https://mirrors.bfsu.edu.cn/apache//httpd/httpd-2.4.46.tar.gz
    cd /usr/local/src/
    tar xf apr-1.7.0.tar.gz
    tar xf apr-util-1.6.1.tar.gz
    tar xf httpd-2.4.46.tar.gz

    # 将apr和apr-util源码与httpd源码合并,三者共同编译安装
    mv apr-1.7.0 httpd-2.4.46/srclib/apr
    mv apr-util-1.6.1 httpd-2.4.46/srclib/apr-util
    cd httpd-2.4.46/
    ./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre
    --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork
    make && make install

    # 创建apache账户
    useradd -r -s /sbin/nologin apache

    # 修改配置文件
    sed -i 's/^User.*/User apache/' /apps/httpd/conf/httpd.conf
    sed -i 's/^Group.*/Group apache/' /apps/httpd/conf/httpd.conf

    # 配置环境变量
    echo 'PATH="/apps/httpd/bin:$PATH"' > /etc/profile.d/httpd.sh
    . /etc/profile.d/httpd.sh

    # 配置man帮助
    echo 'MANDATORY_MANPATH /apps/httpd/man' >> /etc/man_db.conf

    # 创建service unit文件,设置开机启动
    cat > /lib/systemd/system/httpd.service << EOF
    [Unit]
    Description=The Apache HTTP Server
    After=network.target remote-fs.target nss-lookup.target
    Documentation=man:httpd(8)
    Documentation=man:apachectl(8)

    [Service]
    Type=forking
    ExecStart=/apps/httpd/bin/apachectl start
    ExecReload=/apps/httpd/bin/apachectl graceful
    ExecStop=/apps/httpd/bin/apachectl stop
    # We want systemd to give httpd some time to finish gracefully, but still want
    # it to kill httpd after TimeoutStopSec if something went wrong during the
    # graceful stop. Normally, Systemd sends SIGTERM signal right after the
    # ExecStop, which would kill httpd. We are sending useless SIGCONT here to give
    # httpd time to finish.
    KillSignal=SIGCONT
    PrivateTmp=true

    [Install]
    WantedBy=multi-user.target
    EOF

    systemctl daemon-reload
    systemctl enable --now httpd.service

     

    3、编写一个一键部署 LAMP 架构之 wordpress 脚本

    #!/bin/bash
    #
    #********************************************************************
    #Author: zhangzexu
    #QQ: 1185673631
    #Date: 2020-09-08
    #FileName: install_Wordpress.sh
    #Description: The test script
    #Copyright (C): 2020 All rights reserved
    #********************************************************************
    set -e
    Discuz="wordpress-5.4.2-zh_CN.zip" #Wordpress包名称,官方下载
    COLOR="echo -e \033[01;31m" 
    END='33[0m'
    Wordpress_user="wordpress" #Wordpress数据库连接用户
    Wordpress_password="tianze" #Wordpress数据库连接用户密码
    Wordpress_database="wordpress" #Wordpress数据库名称

     

    ${COLOR}'开始安装Wordpress'$END
    sleep 3

     

    yum_install() {
    yum list &>/dev/null
    echo "Yum源检查完毕开始安装依赖包";sleep 3
    yum -y install vim && yum -y install unzip httpd php php-json php-mysqlnd mariadb-server && $COLOR "yum安装完成,开始启动服务..." $END || $COLOR"您的yum源无法连接,请查看"$END
    }

     

    start_service(){
    systemctl enable --now httpd mariadb 
    [ $? -ne 0 ] && $COLOR"Htppd启动失败,退出!"$END 
    $COLOR"Httpd And Mariadb 启动成功"$END
    }

     

    mysql_user(){
    mysql -e "create database $Wordpress_database"
    mysql -e "create user '$Wordpress_user'@'localhost' identified by '$Wordpress_password'"
    mysql -e "grant all on $Wordpress_database.* to $Wordpress_user@'localhost'"
    mysql -e "flush privileges"
    }

     

    install(){
    $COLOR"开始下载Wordpress包"$END
    sleep 2
    wget https://cn.wordpress.org/$Discuz && $COLOR"下载Wordpress包完成,开始安装!!"$END || $COLOR"下载Wordpress包失败!"$END
    #if [ ! -f $Discuz ];then
    # echo "Wordpress包不存在"
    # else
    # exit
    #fi
    unzip ${Discuz}
    sleep 5
    mv wordpress/* /var/www/html/
    chown -R apache.apache /var/www/html/
    sleep 3
    $COLOR"恭喜您!Wordpress安装完成,请前往浏览器输入http://ip/进行下一步安装。 数据库名称:$Wordpress_database 账号:$Wordpress_user 密码:$Wordpress_password"$END
    }

     

    yum_install
    start_service
    mysql_user
    install

    把生命浪费在美好的事物上
  • 相关阅读:
    圆周率的计算与进度条
    Python的使用方法
    Python科学计算库
    linux 命令总结[转]
    如何在 Windows 平台上下載 Android 的源码[转]
    装MSN报错问题解决 无法定位程序输入点except handler4 common 于动态链接库nsvcrt.dll【转】
    编写xorg.conf,简单三行解决ubuntu分辩率不可调的问题【转】
    谁说 Android 手机一定要 root 权限才能截屏?![转]
    给自己的忠告[转]
    lockdir加密bug[转]
  • 原文地址:https://www.cnblogs.com/tz66/p/13632641.html
Copyright © 2011-2022 走看看