摘要
Web Server 性能分析
- Apache vs Nginx
- JVM vs Go
问题
1 | # |
1 | ## 持续输出进程数 |
Apache Server MPM
问题:为什么 Apache HTTP Server 启动有多个进程
多处理模块(Multi -Processing Modules,MPM)
1 | $ ./httpd -V |
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
- How Linux Works:The Big Picture
- How Linux Works:BASIC Commands
- How Linux Works:BASIC Commands Extension
- How Linux Works:Device and FileSystem
- How Linux Works:Boots
- How Linux Works:用户空间
- How Linux Works:内存管理
- How Linux Works:网络管理
- PreviewHow Linux Works:路由管理
扩展阅读:动态追踪技术
- 动态追踪技术(一):DTrace 导论
- 动态追踪技术(二):strace+gdb 溯源 Nginx 内存溢出异常
- 动态追踪技术(三):Tracing Your Kernel Function!
- 动态追踪技术(四):基于 Linux bcc/BPF 实现 Go 程序动态追踪
- 动态追踪技术(五):Welcome DTrace for Linux
案例与实务
- 最佳工程实践:Stack Overflow 架构 - 2016 Edition
- 最佳工程实践:Oracle 数据库迁移割接实践
- 最佳工程实践:基于LVS的AAA负载均衡架构实践
- VIPServer | Facebook Open-sourcing Katran, a scalable network load balancer