web容器(01):Apache配置监控
2021-07-02 12:07
标签:ant ddd blog thread lam currently 相关 目录 建立连接 响应时间长可能原因: 硬件、应用服务器、网络、负载机、中间件线程池排队、数据库连接池排队、sql语句、jvmGc、代码逻辑 如何分析: 分析系统架构节点 开发在日志中打印方法在调用时消耗的时间 web容器:Nginx apache tomcat resin weblogic websphere apache:处理静态资源性能好些,处理servlet这样的动态请求性能会差些 tomcat:处理动态请求性能会好些 apache: 1、通渠配置文件httpd.conf 1)位置: yum安装:/etc/httpd/conf/ 编译安装:/opt/lampp/etc/ etc/extra目录下有多个conf文件,在通渠配置文件中,如果要用到extra中的conf文件,需要在通渠配置文件中include对应的extra中的conf文件,或者将要使用的配置文件的内容拷到通渠配置文件中。 2)通渠配置文件相关配置解释: ServerRoot "/etc/httpd" → apache的启动路径 PidFile run/httpd.pid → apache启动的时候会产生一个pid Timeout 60 → 接收和发送的超时时间是60s KeepAlive Off → 长连接(建立握手,通道一直在),off此处标识短连接,长连接的性能较好,但是弊端也是显而易见的,线程和线程池之间的通道一直存在,建立连接的线程不用的时候连接还是存在,那么其它的线程,无法和线程池进行连接,导致系统无响应。 在jmeter中默认使用use keepalive长连接,lr中默认使用短连接,使用长短连接对性能测试的tps影响可能会相差很大。使用长连接测试出来的tps可能会大很多。 MaxKeepAliveRequests 100 → 最大使用多少个长连接 KeepAliveTimeout 15 → 长连接最大的等待时间,如果这个时间超过配置的时间,这个连接不生效 # prefork MPM → 进程工作模式。多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器,它适合于没有线程安全库,需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求。 StartServers 8 → 初始化启动进程数 # worker MPM → 混合的多进程多线程工作模式。使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性。每个进程可以拥有的线程数量是固定的。服务器会根据负载情况增加或减少进程数量。 StartServers 4 → 初始化启动进程数 Listen 80 → 监听的端口号 LoadModule → 加载动态库 .so标识动态库 Include conf.d/*.conf → 将conf.d/*.conf中的配置文件加载进来 DocumentRoot "/var/www/html" → apache的工作路径,存放应用程序代码 ErrorLog logs/error_log → 错误日志路径 LogLevel warn → 日志级别,一般配置info级别 AddDefaultCharset UTF-8 → 默认字符集 # Some examples: 配置监听: 修改好通渠配置文件后,重启apache: service httpd stop/service httpd start 2、Apache的监听 1)监听server-status 在通渠配置文件httpd.conf中配置监听 配置监听 对照配置文件页面内容释义,画图解释: 方便我们监控进程的状态,进而分析系统的性能。 2)监听server-info 在通渠配置文件中配置监听 3、切换apache为线程工作模式 默认情况下,apache为进程工作模式,那么如何将apache切换为线程工作模式呢? 1)进入/usr/sbin目录 [root@Linz sbin]# cd /usr/sbin/ 2)重命名httpd文件 [root@Linz sbin]# mv httpd httpd_prefork 3)重启apache [root@Linz sbin]# service httpd stop 4)再次访问http://192.168.20.129/server-status页面 通渠配置文件中的配置如下: # worker MPM 第一次访问页面: 1 requests currently being processed, 74 idle workers 第二次第三次... ...第N次访问页面: 1 requests currently being processed, 49 idle workers 根据通渠配置文件里的配置,apache在启动时,开启了4个进程,每个进程里有25个线程,那么启动后,总共是启动了100个线程,又由于配置了MinSpareThreads和MaxSpareThreads,apache kill掉1个进程,那么在页面显示中,就显示了1个繁忙线程和74个空闲线程。 第N次访问页面后,最终稳定下来的是50个线程。 5)页面释义,类似进程工作模式 Apache Server Status for 192.168.20.129 Scoreboard Key: PID Key: 6)进程和线程监控页面的意义 举例: max:75线程 70左右的线程都处于工作状态(发送、接收、写日志、解析、连接断开再连接) tps:3000 分布式负载1秒发送200个请求 wait1 web容器:75个线程 wait2 16颗cpu,同时处理16个请求 wait3 响应时间慢,看耗时地方,看线程池是否在排队(线程池工作状态,大部分都在工作) 最终发送到数据库的请求越来越少 负载机越好,性能表现可能越好 需要检测线程池请求是否存在排队现象,如果存在,需要加大线程池 看线程池状态耗时的地方 4、apache日志 1)位置 [root@Linz httpd]# ls 2)日志 error_log → 错误日志 access_log → 增长日志 可以看到线上的功能访问热度,热度:性能测试的功能点 每一秒功能最大的并发数,重点功能,用户用得多的功能 5、apache的功能 和nginx一样,既可以做web容器,也可以做负载均衡服务器 apache+tomcat做负载均衡,前端apache后端tomcat web容器(01):Apache配置监控 标签:ant ddd blog thread lam currently 相关 目录 建立连接 原文地址:http://www.cnblogs.com/lz2lhy/p/7045142.html
MinSpareServers 5 → 最小服务器空闲进程数(预派生)
MaxSpareServers 20 → 最大服务器空闲进程数
ServerLimit 256 → apache同时处理服务进程数
MaxClients 256 → apache可以同时处理的请求数,其缺省值150是远远不够的,如果请求总数已达到这个值(可通过ps -ef|grep http|wc -l来确认),那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源还剩下很多而HTTP访问却很慢的主要原因。Apache默认的限制不能大于256。
MaxRequestsPerChild 4000 → 一个进程在其生存周期内,最多处理4000次请求,如果处理4000次请求后,该进程被销毁,避免僵尸进程,防止意外的内存泄漏,在服务器负载下降的时候,自动减少进程数
MaxClients 300 → 最大启动的进程数
MinSpareThreads 25 → 最小空闲线程数
MaxSpareThreads 75 → 最大空闲线程数
ThreadsPerChild 25 → 每个进程下有25个线程
MaxRequestsPerChild 0 → 进程永远存活
#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html
SetHandler server-status
Order deny,allow
Deny from all
# Allow from .example.com
SetHandler server-info
Order deny,allow
Deny from all
# Allow from .example.com
[root@Linz sbin]# ls http*
httpd httpd.event httpd.worker
[root@Linz sbin]# mv httpd.worker httpd
[root@Linz sbin]# httpd -l → 查看apache的工作模式
Compiled in modules:
core.c
worker.c → 修改后,工作模式变为worker.c
http_core.c
mod_so.c
停止 httpd: [确定]
[root@Linz sbin]# service httpd start
正在启动 httpd: [确定]
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
StartServers 4
MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
1 requests currently being processed, 49 idle workers
_____________W___________.......................................
................................................................
_________________________.......................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
................................................................
"_" Waiting for Connection, "S" Starting up, "R" Reading Request,
"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
"C" Closing connection, "L" Logging, "G" Gracefully finishing,
"I" Idle cleanup of worker, "." Open slot with no current process
2555 in state: _ , 2555 in state: _ , 2555 in state: _
2555 in state: _ , 2555 in state: _ , 2555 in state: _
2555 in state: _ , 2555 in state: _ , 2555 in state: _
2555 in state: _ , 2555 in state: _ , 2555 in state: _
2555 in state: _ , 2555 in state: W , 2555 in state: _
2555 in state: _ , 2555 in state: _ , 2555 in state: _
2555 in state: _ , 2555 in state: _ , 2555 in state: _
2555 in state: _ , 2555 in state: _ , 2555 in state: _
2555 in state: _ , 2445 in state: _ , 2445 in state: _
2445 in state: _ , 2445 in state: _ , 2445 in state: _
2445 in state: _ , 2445 in state: _ , 2445 in state: _
2445 in state: _ , 2445 in state: _ , 2445 in state: _
2445 in state: _ , 2445 in state: _ , 2445 in state: _
2445 in state: _ , 2445 in state: _ , 2445 in state: _
2445 in state: _ , 2445 in state: _ , 2445 in state: _
2445 in state: _ , 2445 in state: _ , 2445 in state: _
2445 in state: _ , 2445 in state: _ ,
conf conf.d logs modules run
[root@Linz httpd]# pwd
/etc/httpd
[root@Linz httpd]# cd logs/
[root@Linz logs]# ls
access_log access_log-20170702 error_log-20170618 error_log-20170702
access_log-20170618 error_log error_log-20170626
上一篇:【献给CWNU的师弟】Web篇
下一篇:CSS实现禁止文字选中
文章标题:web容器(01):Apache配置监控
文章链接:http://soscw.com/index.php/essay/100790.html