- 浏览: 2538432 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (676)
- linux运维 (157)
- php (65)
- mysql (78)
- nginx (27)
- apche (18)
- framework (6)
- windows (9)
- IDE工具 (23)
- struts2 (7)
- java (13)
- 移动互联网 (14)
- memcache redis (23)
- shell基础/命令/语法 (37)
- shell (50)
- puppet (4)
- C (11)
- python (9)
- 产品经理 (27)
- Sphinx (4)
- svn (12)
- 设计构建 (12)
- 项目管理 (44)
- SEO (1)
- 网站架构 (26)
- 审时度势 (42)
- 网络 (14)
- 激发事业[书&视频] (81)
- 其它 (12)
- 摄影 (8)
- android (21)
最新评论
-
zhongmin2012:
原文的书在哪里
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
renzhengzhi:
你好,请问个问题,从master同步数据到slave的时候,s ...
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
ibc789:
你好,看了你的文章,我想请教个问题, 我在用 redis的时候 ...
redis 的两种持久化方式及原理 -
iijjll:
写得非常好
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
iijjll:
写得非常好
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器
起因:线上的一台服务器,最近总是出现 访问 很慢的情况发生,点击一个链接要2秒钟以上才能打开,按照我们对于访问人数的估计,服务器应该不至于响应这么慢,从而需要针对这个问题进行分析,来解决网站访问过慢。
分析:
1、首先,在页面访问变慢情况发生时,使用 top 命令查看了服务器的负载情况,发现负载并不高,初步估计不是程序的问题。
2、然后,查看了线程中的 httpd 的数量,
ps -aux | grep httpd
ps -aux | grep httpd | wc -l
发现,线程数已经达到了 apache 设置的最大值。由此断定是网站访问人数过多造成了访问过慢。
3、为了验证,查看了连接数和当前的连接数,分别是
netstat -ant | grep $ip:80 | wc -l
netstat -ant | grep $ip:80 | grep EST | wc -l
发现果然,连接数特别多,远远超过我们的估计值。
4、刚开始的时候,对于服务器的 MPM 配置方式不是特别的熟悉,认为修改服务器配置可以解决问题。主要的配置部分包括 prefork 模式 或者 work 模式的配置,下面是一些简单的介绍。
prefork 模式:
以 prefork 模式工作的 apache 的默认配置:
<IfModule mpm_prefork_module>
ServerLimit 2000
StartServers 5 #指定服务器启动时建立的子进程数量
MinSpareServers 5 #指定空闲子进程的最小数量
MaxSpareServers 10 #指定空闲子进程的最大数量
MaxClients 150 #指定同一时间客户端最大接入请求的数量(单个进程并发线程数),任何超过该限制的请求都将进入等候队列,一旦一个连接被释放,队列中的请求将得到服务
MaxRequestsPerChild 0 #指定每个子进程在其生存周期内允许伺服的最大请求数量,默认为10000,0表示子进程永远不结束
</IfModule>
prefork 控制进程在最初建立“StartServers”个子进程后,为了满足 MinSpareServers
设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足
MinSpareServers设置的值为止。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。
MaxSpareServers
设置了最大的空闲进程数,如果空闲进程数大于这个值,Apache会自动kill掉一些多余进程。这个值不要设得过大,但如果设的值比
MinSpareServers小,Apache会自动把其调整为
MinSpareServers+1。如果站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers。
MaxClients是这些指令中最为重要的一个,设定的是
Apache可以同时处理的请求,是对Apache性能影响最大的参数。其缺省值150是远远不够的,如果请求总数已达到这个值(可通过ps
-ef|grep httpd|wc
-l来确认),那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源还剩下很多而HTTP访问却很慢的主要原因。虽然理论上这个值越大,可以
处理的请求就越多,但Apache默认的限制不能大于256。在 apache2
中通过ServerLimit指令无须重编译Apache就可以加大MaxClients。
虽然通过设置ServerLimit,我们可以把MaxClients加得很大,但是往往会适得其反,系统耗光所有内存。以一台服务器为例:内存2G,每
个apache进程消耗大约0.5%(可通过ps
aux来确认)的内存,也就是10M,这样,理论上这台服务器最多跑200个apache进程就会耗光系统所有内存,所以,设置MaxClients要慎
重。
worker 模式:
以 worker 模式工作的 apache 的默认配置为:
<IfModule mpm_worker_module>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
Worker 由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。同样,为了不在请求到来时再生成线程,
MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients 设置了同时连入的clients最大总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。
MinSpareThreads和 MaxSpareThreads的最大缺省值分别是75和250。这两个参数对Apache的性能影响并不大,可以按照实际情况相应调节。
ThreadsPerChild是worker MPM中与性能相关最密切的指令。
ThreadsPerChild的最大缺省值是64,如果负载较大,64也是不够的。这时要显式使用 ThreadLimit指令,它的最大缺省值是20000。
Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild
值决定的,应该大于等于MaxClients。如果负载很大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时
也需要显式声明ServerLimit(最大值是20000)。需要注意的是,如果显式声明了ServerLimit,那么它乘以
ThreadsPerChild的值必须大于等于MaxClients,而且MaxClients必须是ThreadsPerChild的整数倍,否则
Apache将会自动调节到一个相应值。
服务器的apache采用的是 prefork 的工作模式,对 MaxClients 进行了相应的调整,发现服务启动后很短时间,连接数就能够达到最大。
5、后来想到需要查看用户都是访问的那些页面,将配置中的
access
_log 打开,发现
85%以上的访问都是直接访问的资源文件,由此判定,用户可能使用了多线程的下载工具,或者这些资源遭受了盗链。
6、找到了问题所在,进行解决也就比较好办了。想到了两个方法:
A、对单个IP进行连接的线程限制,不允许多线程连接资源。
对于IP限制,我采用了 mod_limitipconn 这个模块。这个模块的好处是比较简单,缺点是不能够针对单独的文件夹或者文件进行设置,而且不支持虚拟主机。
在 apache 中安装了这个模块后,在配置文件中添加如下几段就可以生效了:
ExtendedStatus On
< IfModule mod_limitipconn.c >
< Location / > # 所有虚拟主机的/目录
MaxConnPerIP 3 # 每IP只允许3个并发连接
NoIPLimit image/* # 对图片不做IP限制
< /Location >
< Location /mp3 > # 所有主机的/mp3目录
MaxConnPerIP 1 # 每IP只允许一个连接请求
OnlyIPLimit audio/mpeg video # 该限制只对视频和音频格式的文件
< /Location >
< /IfModule >
B、添加URL重写,防止盗链。
防止盗链,一个重要的方法就是判断请求的 refer,但是如果使用一些浏览器发出请求的时候将 refer 去掉,或者伪装,这个办法就无能为力了。但是貌似还有更高级的方法,还是可以实现这个功能。
安装apache的 mod_rewrite 模块后,在apache配置文件中添加
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^
http://abc.com/.*
$ [NC]
RewriteCond %{HTTP_REFERER} !^
http://abc.com
$ [NC]
RewriteCond %{HTTP_REFERER} !^
http://www.abc.com/.*
$ [NC]
RewriteCond %{HTTP_REFERER} !^
http://www.abc.com
$ [NC]
RewriteRule .*\.(gif|jpg|swf)$
http://www.abc.com/about/nolink.png
[R,NC]
这样盗链的请求会被重定向到一个错误页面,从而减少下载带给服务器的压力。
发表评论
-
伪静态
2011-11-29 17:34 1432--------------------Apache ... -
关于Apache (httpd)服务器防DDOS模块mod_evasive的使用说明
2011-03-21 22:34 4085http://www.docin.com/p-83334545 ... -
[shell]Nginx/Apache日志分析脚本
2011-03-21 12:47 8484http://junlee.blog.51cto.com/22 ... -
http.conf优化,安全配置
2010-10-31 17:19 2814---------------------- apache日 ... -
【汇总】apache
2010-10-31 17:17 1231----------------apache SetEnv ... -
如何让apache支持.shtml 让apache支持include标签
2009-10-11 15:23 3662打开conf目录下的httpd.conf文件,搜索“AddTy ... -
[CentOS]apache+mod_ssl中证书生成方法
2009-10-07 10:58 3869--------------------------- ... -
启用Apache2 的mod_deflate(gzip)來压缩网页提高传输效能
2009-08-22 21:25 2666Apache2之后的版本,模块名不叫gzip,而叫mod_de ... -
apache的缓存mod_cache设置----待更新
2009-08-16 14:38 3834Apache模块 mod_cache 手册:http://la ... -
apache的prefork和workder模式
2009-08-16 14:12 6997如何知道当前apache的应用模式 ht ... -
Apache中的mod_proxy模块应用
2009-08-16 13:39 9799Apache模块 mod_proxy手册:http://lam ... -
ubuntu apache2配置详解
2009-08-16 12:48 5964ubuntu apache2配置 1.apache2.con ... -
查看Apache的请求数和开启Apache Server Status
2009-08-16 11:58 6062在Linux下查看Apache的负 ... -
【维护】apache 配置和日志+shell
2009-08-13 09:49 1702apache安装目录 在phpinfo ... -
【汇总】Apache压测命令ab
2009-06-30 21:14 4023ab的全称是ApacheBench,是Apache附带的一 ... -
虚拟主机配置教程,包括apache mod_vhost_alias模块
2009-06-29 22:52 5328----------- /htdocs/test ... -
伪静态页面生成教程mod_rewrite
2009-06-23 09:48 2992从phpchina.com转载过来的,教程写的不错,容易理解 ...
相关推荐
合理设置Apache的最大连接数对于提高服务器性能和稳定性至关重要。通过深入了解各个配置参数的意义及其相互之间的关系,结合实际情况进行灵活调整,可以最大限度地发挥服务器的潜力。此外,持续的监控与优化也是必不...
在Linux环境下,Apache的并发连接数和带宽可以通过两个模块来实现:mod_limitipconn和mod_bandwidth。这两个模块是由Apache社区的开发者创建的,用于增强服务器的管理能力。 1. **mod_limitipconn**: 这个模块...
"查看Apache连接的连接并发数" Apache连接是Apache服务器处理并发请求...在了解Apache连接的连接并发数和TCP连接状态后,管理员可以更好地优化Apache服务器的性能,提高服务器的并发处理能力,满足高并发请求的需求。
nginx 与 Apache 限制 IP 连接数和带宽方法 本文档旨在介绍如何使用 Nginx 和 Apache 限制 IP 连接数和带宽的方法。这些方法可以帮助管理员控制服务器的资源使用,避免因为大量恶意请求而导致服务器崩溃。 一、...
以下是一些常用命令来查看Apache的连接数和当前连接数: 1. **查看所有连接数**: ```bash netstat -ant | grep $ip:80 | wc -l ``` 这个命令会列出所有到Apache监听的80端口的TCP连接,并通过`wc -l`计算行数...
本文将详细介绍如何实现Apache服务器上的流量控制及连接数限制,并提供具体的步骤和配置示例。 #### 安装与启用流量控制模块 为了实现流量控制功能,首先需要安装一个名为`mod_bw`(BandwidthMod)的第三方模块。...
标题中的“Windows下的Apache限制IP连接数”是指在Windows操作系统上使用Apache web服务器时,如何配置服务器以限制每个IP地址的并发连接数。这是一项重要的安全策略,可以防止恶意用户或DDoS攻击通过大量并发连接...
"增加连接数限制个数"这个话题涉及到网络编程、系统资源管理和性能优化等多个领域。这里我们将深入探讨相关知识点。 首先,理解连接数限制的重要性。在操作系统中,每个连接都需要占用一定的系统资源,包括内存、...
### Apache并发数与带宽限制知识点详解 ...综上所述,通过使用`mod_vhost_limit`和`mod_limitipconn`两个模块,我们可以有效地控制Apache服务器上的并发连接数和带宽使用,从而提高系统的稳定性和安全性。
在这个示例中,开发者可能创建了一个名为`RabbitMQConnectionCount`的类,该类包含一个方法,如`getRabbitMQConnectionCount()`,用于获取RabbitMQ的当前连接数。 ```java import com.rabbitmq.client.Connection; ...
这两个模块分别用于控制并发连接数和带宽使用,以确保服务器的稳定运行。 1. **mod_limitipconn**: mod_limitipconn模块允许管理员限制每个IP地址同时连接到服务器特定目录的并发连接数量。这对于防止恶意用户或...
MaxClients n 1、apache1.x n是整数,表示最大连接数,取值范围在1和256之间,如果要让apache支持更多的连接数,那么需要修改源码中的httpd.h文件,编辑/httpd-2.0.59/include/httpd.h中的HARD_SERVER_LIMIT值改大...
总之,解决 Apache 在 Windows 环境下连接数不足的问题,主要是通过修改 `httpd.conf` 或 `httpd-mpm.conf` 文件中的 `ThreadsPerChild` 和 `MaxRequestsPerChild` 参数。同时,理解不同工作模式的特点和配置方法,...
此外,还可以利用Apache服务器的内置日志或模块(如mod_status)来获取更具体的服务器状态,包括当前连接数和最大连接数。 `如何查看httpd的并发请求数与TCP连接数_电脑软件_百度经验.url` 和其他链接提供的教程...
- **作用**:通过该命令可以快速获取当前系统中运行的Apache进程总数,间接反映出当前的并发连接数。 ##### 2. 使用`netstat`命令分析TCP连接状态 ``` netstat -n | awk '/^tcp/{++S[$NF]} END {for(a in S) print ...
3. **配置DBCP**:在使用DBCP前,我们需要配置相关的属性,如数据库URL、用户名、密码、最大连接数、最小连接数、超时时间等。这些配置通常写在如`dbcp.properties`这样的配置文件中,或者通过Java代码动态设置。 4...
标题中的“Tomcat配置连接数(优化)”指的是在Apache Tomcat服务器中调整与处理并发请求相关的设置,以提升服务器的性能和稳定性。这通常涉及到调整最大连接数、线程池大小、超时时间等核心参数。在高并发场景下,...
2. **资源管理:** 可以设置连接池的最大和最小连接数,避免资源浪费和过度消耗。 3. **自动管理连接:** 连接池会自动检测并处理坏掉的连接,保证应用的稳定运行。 4. **配置灵活:** 提供多种配置选项,可以根据...