Linux 性能诊断:Web Server

摘要

Web Server 性能分析

  • Apache vs Nginx
  • JVM vs Go

问题

1
2
3
#
[Wed Jul 25 22:19:05 2018] [error] server reached MaxClients setting, consider raising the MaxClients setting

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
## 持续输出进程数
$ watch "pgrep httpd | wc -l"
Every 2.0s: pgrep httpd | wc -l Thu Jul 26 21:12:12 2018
42
$ ps -ylC httpd --sort:rss
S UID PID PPID C PRI NI RSS SZ WCHAN TTY TIME CMD
S 501 37620 1 0 80 0 1268 11253 poll_s ? 00:14:17 httpd
S 501 37622 37620 0 80 0 1708 11320 inet_c ? 00:00:00 httpd
S 501 37623 37620 0 80 0 1708 11320 inet_c ? 00:00:00 httpd
S 501 37624 37620 0 80 0 1708 11320 inet_c ? 00:00:00 httpd
S 501 37625 37620 0 80 0 1708 11320 inet_c ? 00:00:00 httpd
.....
## 当前连接数
$ netstat -an | grep :2003 | wc -l
172
# 累计消耗内存(M)
$ ps aux|grep -v grep|awk '/httpd/{sum+=$6;n++};END{print sum/1024}'
# 平均每个进程消耗内存(M)
$ ps aux|grep -v grep|awk '/httpd/{sum+=$6;n++};END{print sum/n/1024}'

Apache Server MPM

问题:为什么 Apache HTTP Server 启动有多个进程

多处理模块(Multi -Processing Modules,MPM)

1
2
3
4
5
6
7
8
$ ./httpd -V
Server version: Apache/2.2.31 (Unix)
......
Architecture: 64-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
  • Prefork 工作模式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    //httpd.conf 默认配置
    <IfModule prefork.c>
    StartServers 8 # 服务初始化的工作进程数(work process)
    MinSpareServers 5 # 保持的最少空闲进程数
    MaxSpareServers 20 # 保持的最大空闲进程数
    ServerLimit 256 # 保持的最大活动进程数,设定MaxClients的上限值
    MaxClients 256 # 最大并发连接数
    MaxRequestsPerChild 4000 # 每个子进程在生命周期能服务的最大请求数,即控制每个进程在处理了多少次请求之后自动销毁
    </IfModule>
  • Worker 工作模式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    //httpd.conf 默认配置
    <IfModule worker.c>
    StartServers 4 # 初始化的子进程数
    MaxClients 300 # 并发请求最大数
    MinSpareThreads 25 # 最小空闲线程数total=所有进程的线程数加起来
    MaxSpareThreads 75 # 最大空闲线程数
    ThreadsPerChild 25 # 每个子进程可生成的线程数
    MaxRequestsPerChild 100 # 每个子进程可服务的最大请求数,0表示不限制,建议设置为非0
    </IfModule>
  • Event 工作模式

Apache vs. Nginx

JVM vs. Go App

电子书《Linux Perf Master》

扩展阅读:性能诊断指南

扩展阅读:How Linux Works

扩展阅读:动态追踪技术

案例与实务

参考文献

推荐文章