zoukankan      html  css  js  c++  java
  • 中间件监控之Apache

     补 系统架构

    nginx接到请求后把请求转发到tomcat,还有种方式是转发到apache(php项目),或者其他语言的应用服务器(放置我们的项目)
    ngnix:是web服务器,接受和转发请求用的,不做任何动态处理
    浏览器直接请求cdn(有钱用cdn,没钱用文件服务器);

     Cdn   内容分发网络 全称是Content Delivery Network

     面试:Cdn 的时间算法,基于什么的算法

    mysql:数据库服务器
    redis:
    集群:多台机器,放一起,请求的时候如果有一个挂了,不影响正常使用,个数是单数,一个leader,多个follower,半数挂了集群就挂了
    消息队列:发个东西过去,排队,第一个人发了第二个发,这个顺序是按接收到的时间
    kafka,ZK(zookeeper):一说这两个肯定是集群
    日志分析:需要用到awk,grep,sed
    确定性能指标:分析日志查看了解pv 
    PV:page view,页面浏览量或点击量,刷新一次页面即被计算一次,简称PV,
    UV:即Unique Visitor,访问您网站的一台电脑客户端为一个访客。00:00-24:00内相同的客户端只被计算一次
    IP(独立IP):指独立IP数。00:00-24:00内相同IP地址之被计算一次
    KLE(一套框架,可以满足日志分析)、 Maven  自己了解
     

    面试题:大数据迁移怎么迁移,比如你服务器上有一个10个G的日志文件,你怎么去迁移 (01:42分左右)

    传之前   校验MD5  传之后  再校验MD5 确保传过去的数据一致

    保证完整性 

    根据网络传输效率,考虑怎么分片  服务器直接用scp  命令

    传输完成后校验MD5  然后再组装

    存储分片(某个扇区损坏不影响其他扇区)  多线程

    速度快,安全系数高

    所有的文件都是二进制形式保存,取决于你以什么形式打开

     

    利用分片传输+多线程传输的机制
    1.分片,把大内存的数据分成n片
    2.md5 算法校验,在传输前传输后分别校验,检查文件传输正确性、完整性后  再组装
    3.多线程传,使用时间为单线程的n分之一

    https://blog.csdn.net/ltx06/article/details/70162107 

     
    一、Apache
    1、Apache 简介
    Apache HTTP Server  是一个开源的web 服务器,具有简单、速度快、稳定性高的特点,并且还可以作为代理服务器
     
    2、Apache 安装

     如果需要集成php  用lampp  集成包

     Find  / -name httpd  查找命令   /  根目录下的所有路径  -name  通过名字

     Find / |grep httpd  模糊查找

    A,使用yum安装

    Yum  安装

    apache  /etc/httpd  配置文件 为 httpd.conf  可执行文件

     /usr/sbin/httpd  启动apache   service httpd start|restart|stop (yum 安装会作为一个系统服务)

    B,使用安装包安装

    C,Lampp  自带的httpd

    bin 目录所有可执行文件  

    /opt/lampp/etc   lampp 配置文件

    /opt/lampp/etc/extra  扩展的配置文件

    查看Apache 版本:

    /opt/lampp/bin/httpd -v 查看apache 版本

    /usr/sbin/httpd -V  查看你安装的apache的版本信息等细节

    配置文件 :/opt/lampp/etc/httpd.conf
               /etc/httpd/conf/httpd.conf

    配置文件常见修改的地方:

    ServerRoot "/opt/lampp"

    Listen  监听 直接提供端口  Listen 9090 

    3、Apache 主要目录和配置文件

     命令:

    配置文件 :/opt/lampp/etc/httpd.conf
               /etc/httpd/conf/httpd.conf

    查看进程  

    ps -ef       ps  -aux 

    ps -ef  

     

    Root  用户启动主进程的同时会启动一些子进程  

    所以  部署php项目,将项目代码放到/opt/lamp/htdocs该目录下

    访问项目时,http://ip:端口号/项目名 便可访问

    如果无法访问:1,查看该项目是否放至在apache默认web站点目录路径下;2,项目名是否正确 ( bbs 文件名为upload  所以需要先改名为bbs)

     Php  项目都是热启动   项目不停止运行

    1、拉代码 
    2、修改配置文件 

    部署好bbs后有一个初始化用户名密码:
    其实修改的是下面文件(初始化操作实际就是文件io 读写操作)跟数据库打交道一般是io操作

     数据库迁移的时候需要手动修改该文件

    请求日志 看access_log  

     Apache 扩展文件 

     重点:Apache  工作模式

    用的系统的apache  /opt/lampp/etc/extra  下的httpd-mpm.conf

    web 服务器Apache 目前一共有三种稳定的MPM(Multi -Processing Module,多进程处理模块)模式。它们分别是prefork ,worker和event 

    查看当前工作模式  

    /opt/lampp/bin/httpd -v 查看apache 版本

    /usr/sbin/httpd -V  查看你安装的apache的版本信息等细节

    中Server  MPM  字段

    1、Prefork  模式   单进程单线程,一对一

     

    Prefork MPM是一个非常稳定的模式,Apache 在启动之初,会预派生fork 一些子进程,然后等待请求进来,并且总会保持一些备用的子进程。

    同时派生出的每个子进程只有一个线程,在一个时间点内只能处理一个请求。Prefork MPM在效率上要比Worker MPM高,但是在内存使用方面也会大很多。

    它并不擅长处理高并发请求,在这种场景下,它会将请求放进队列中,一直等到有可用进程,请求才会被处理。

    长连接:保持的时间比较长,比如视频

    参数详解:

     

    StartServers  //指定服务器启动时建立的子进程数,默认为5

    MinSpareServers //指定空闲子进程的最小数量,默认为5.如果当前空闲子进程数小于配置的数量则Apache会以最大每秒一个的速度创建新的子进程

    MaxSpareServers  //指定空闲子进程的最大数量,默认为10.如果当前有超过设置的最大进程数则会杀死多余的进程,如果设置的比MinSpareServers 小,则Apache会默认修改为MinSpareServers +1

    MaxRequestWorkers  //限定服务器同一时间内客户端最大接入的请求数量,默认是150.任何超过了该限制的请求都要进入等待队列,

                                       一旦一个个连接被释放,队列中的请求才将得到服务。在Apache2.3 前又叫MaxClients

    MaxConnectionsPerChild  //每个子进程的在其生命周期内允许最大的请求数量,如果请求总数已经达到这个数值,子进程将会结束;

                                             如果设置为0,子进程将永远不会结束。若该值设置为非0值,可以防止运行PHP导致的内存泄漏(结束以后会释放内存)。

    一个请求结束后会保留一些“脏数据”,连接的请求越多脏数据越多,到达一定程度后会结束该进程,释放内存。

    ServerLimit 2000          //MaxRequestWorkers(MaxClients)最大是256个线程,如果需要更大就需要加上该参数了。

                                这个参数的最大值是2000,如果需要更大需要编译apache。生效前提:必须放在其他指令的前面

     

    进程数与cpu  有关   不可能全部占满、

    思考:那要是避免排队的情况 可以直接改 prefork的数值吗?

     

    2、Aache工作模式-Work模式   单进程,多线程   一对多

     

    参数详解:

    StartServers  //服务器启动时创建的子进程数

    MaxClients   //

    MinSpareThreads   //最小空闲线程数,这个MPM将基于整个服务器监控空闲线程数。假如服务器中的空闲线程数太少,则将会创建新的空闲线程

    MaxSpareThreads   //最大空闲线程数。这个MPM将基于整个服务器监控空闲线程数。假如服务器中的总的空闲线程数太多,子进程将杀死多余的空闲线程。最大

                                        空闲线程数的取值范围是有限制的。Work 需要其大于等于MinSpareThreads  和ThreadsPerChild 的总和

    ThreadsPerChild   //每个子进程建立的常驻执行线程数,子进程在启动时建立这些线程后就不会再建立新线程了

    MaxRequestsPerChild   //允许同时伺服的最大接入请求数量。任何超过该限制的请求都将进入等候队列

                                      每个进程能处理多少个请求,处理完成后则会死掉

    思考:现有如下配置

    <IfModule worker.c>
    StartServers         4  
    MaxClients         300
    MinSpareThreads     25 
    MaxSpareThreads     75
    ThreadsPerChild     25    固定为25不可变
    MaxRequestsPerChild  0       每个进程能处理多少个请求,处理完成后则会死掉   释放内存
    </IfModule>

    4个进程 每个进程允许25个线程   总共100个  不符合maxsparethreads 75

    则会杀掉一个进程   则代表一次性杀掉了25个线程  符合maxsparethreads 

    在25 ~ 75 之间  不会做任何修改

    如果不满足最小的minsparethreads 25 则会创建一个进程      

     

    Work  模式不安全  一个进程死掉后子线程全部被杀掉

     

    3、Apache工作模式-Event模式  (具体参考ppt)

    Apache  工作模式切换

    切换工作模式   修改文件名即可 默认是prefork   

    举例说明:把这个改为httpd名,工作模式变为work

    用同一个配置文件,端口一定会被占用

    重点:Apache 监控

    一、如何获取apache监控参数

    Vi  /etc/httpd/conf/httpd.conf

    SetHandler  加载某个模块

    order 先执行deny 

    重启apache   项目是实时读取的,但自身配置不是,所以需要重启

    浏览器输入:http://ip/server-status

     

     Apache  优化

    面试:怎么去apache调优?
    提高可支持的连接数,能不能处理取决于项目代码的处理能力
    优化手段就是把prefork改为woker,提高支持的线程数
    worker有可能崩
    根据实际使用情况,评估下压力情况,使用者,查看工作模式是哪个
    Apache 监控重点:
    看运行状态;看是否有排队
    总之,apache是世界上最好的web服务器
  • 相关阅读:
    129 01 Android 零基础入门 02 Java面向对象 06 Java单例模式 03 饿汉模式 VS 懒汉模式 02 懒汉式的代码实现
    128 01 Android 零基础入门 02 Java面向对象 06 Java单例模式 03 饿汉模式 VS 懒汉模式 01 饿汉式的代码实现
    127 01 Android 零基础入门 02 Java面向对象 06 Java单例模式 02 单例模式概述 01 单例模式的定义和作用
    126 01 Android 零基础入门 02 Java面向对象 06 Java单例模式 01 设计模式概述 01 设计模式简介
    125 01 Android 零基础入门 02 Java面向对象 05 Java继承(下)05 Java继承(下)总结 01 Java继承(下)知识点总结
    leetcode-----121. 买卖股票的最佳时机
    leetcode-----104. 二叉树的最大深度
    Json串的字段如果和类中字段不一致,如何映射、转换?
    Mybatis-Plus的Service方法使用 之 泛型方法default <V> List<V> listObjs(Function<? super Object, V> mapper)
    模糊查询
  • 原文地址:https://www.cnblogs.com/chendai21/p/9522796.html
Copyright © 2011-2022 走看看