Apache 打开网页的时候等待时间过长的解决方案
服务器搭建后经常在打开页面的时候,等待很长时间,有时候,都超过一分钟了,然后才能打开,但是打开后,速度又很快,休息一会再点击,又会很慢了,遇到了这种问题很头疼,由于不是专业做服务器配置的,所以刚开始没有找到好的解决办法,只能一点点去测试了
首先尝试了,给Apache开启Gzip功能,减少数据的传输,优化网络,但是效果不明显,还是一样的慢,如何开启GZIP,请查看上一篇日志,Apache开启GZIP。
然后尝试,加入缓存功能,也基本上没有效果,在页面中加入缓存,不在这里进行介绍了,可以查看相关资料。
经过仔细观察,发现是打开网页的时候,一直在等待xxx.xxx.com响应,证明不是GZIP或者是缓存的问题,应该是服务器响应的问题,在这个想到的,第一个是服务器能同时承受的连接数设置的过少,第二个是服务器已有资源已用完,只能等待释放新的资源。
在网上查找资料,开始修改上对于服务器的一些设置,先设置Apache的MPM模块(多路处理模块),设置模块中的相关选项,因为是使用的Windows操作系统,所以设置的模块为:<IfModule mpm_winnt_module>,此模块是在Windows服务器下使用的,该多路处理模块(MPM)是Windows NT上的默认值。它使用一个单独的父进程产生一个单独的子进程,在这个子进程中轮流产生多个线程来处理请求。
在此设置为:
ThreadStackSize 8388608 #用来控制堆栈大小
默认:NetWare上为65536,其他平台上等于操作系统默认值
这个指令用来设置处理客户端连接(包括调用模块以协助处理)的线程允许使用的最大栈尺寸(字节)。
大多数情况下,操作系统默认的栈尺寸很合理。但是在某些情况下,需要调整这个值:
在默认栈尺寸较小的平台上(比如HP-UX),Apache可能会在使用一些需要较大栈尺寸的第三方模块时崩溃。这样的问题可以通过将ThreadStackSize设置为一个较大的值来解决。这种调整应当仅仅在第三方模块提供者明确要求的情况下才需要,或者是您通过诊断确定是由于栈空间太小而导致崩溃。
在某些平台上,如果默认的栈空间大于服务器运行所需空间,那么将ThreadStackSize值降低到小于操作系统默认值可以让每个进程中允许生成的最大线程数量增加。这种类型的调整应该仅在测试环境中使用,并且对所有服务器进程进行充分的测试,因为处理某些罕见的请求需要较大的栈空间。一个很小的服务器配置变化就有可能使得当前的ThreadStackSize设置变得不合适。
ThreadsPerChild 350 每个子进程的服务线程数目
每个子进程的服务线程数目
MaxConnectionsPerChild 10000 最大连接数的一个服务器进程服务
最大连接数的一个服务器进程服务
一些其它的参数
# StartServers: 初始数量的服务器进程开始
# MinSpareThreads: 最小数量的工作线程,保存备用
# MaxSpareThreads: 最大数量的工作线程,保存备用
# ThreadsPerChild: 固定数量的工作线程在每个服务器进程
# MaxRequestWorkers: 最大数量的工作线程
# MaxConnectionsPerChild: 最大连接数的一个服务器进程服务
由于是在进行测试,所以所设置数量,并不提供准确的值,仅为解决问题页来,具体数值大小,请参考自身设计
以后设置完成后,问题依然没有解决,
然后设置服务的连接超超等,在extra/httpd-default.conf 文件,需要在httpd.conf中打开此注释
修改KeepAlive
KeepAlive指的是保持连接活跃
类似于Mysql的永久连接。如果将KeepAlive设置为On,那么来自同一客户端的请求就不需要再一次连接,避免每次请求都要新建一个连接而加重服务器的负担。
表示单个进程的最大请求数
MaxKeepAliveRequests 指令限制了当启用KeepAlive时,每个连接允许的请求数量。如果将此值设为”0″,将不限制请求的数目。我们建议最好将此值设为一个比较大的值,以确保最优的服务器性能。
KeepAliveTimeout的设置说明:
Apache在关闭持久连接前等待下一个请求的秒数。一旦收到一个请求,超时值将会被设置为Timeout指令指定的秒数。
对于高负荷服务器来说,KeepAliveTimeout值较大会导致一些性能方面的问题:超时值越大,与空闲客户端保持连接的进程就越多。
MaxRequestsPerChild 表示单个进程的最大请求数
以上设置完成后,重启服务器,测试后情况有所改观,但是还是经常出现等待响应。
再查找资料,见到有说人到,需要根据协议类型对监听Socket进行优化。
Accept Filter 接收之后对信息进行一个过滤,有介绍说是反向一个代理,具体也不清楚,看到了,果断试一下。
AcceptFilter http none
AcceptFilter https none
之后重启服务,然后进行测试,经过差不多4个小时的测试,没有出现正在等待响应的问题,至此问题基本解决,同时也开启了GZIP的功能,并且也进行了一些其它的优化。一直困扰多天的问题,终于烟消云散了,至于其它的问题,只能边发现问题,边解决问题了。
Apache 打开网页的时候等待时间过长的解决方案的更多相关文章
- 一个spring3.2的项目 从jdk1.7放到1.8的环境中编译,打开网页异常:spring jar包版本升级经历
背景:一个历史项目用的是 spring3.2 的版本,在jdk1.7中运行没有问题,但是如果在jdk1.8中运行就会报错 ---浏览器中显示: HTTP Status 500 - Servlet.in ...
- 性能问题: SQL*Net message from client 等待时间太长
今天我终于自己遇到了这个问题, PO form 打不开了, 看了下 trace 发现 SQL*Net message from client 等待时间太长. 但是这不可能是网络问题, 这个环境是在我电 ...
- nginx 访问localhost老是下载文件不能打开网页什么情况?
nginx打开网页直接下载文件的问题 nginx sites-available文件里的default已经修改过root 路径了. 但是访问localhost的时候总是直接下载网页而不是打开网址 很奇 ...
- Android -- 真正的 高仿微信 打开网页的进度条效果
(本博客为原创,http://www.cnblogs.com/linguanh/) 目录: 一,为什么说是真正的高仿? 二,为什么要搞缓慢效果? 三,我的实现思路 四,代码,内含注释 五,使用方法与截 ...
- 在WPF程序中打开网页:使用代理服务器并可进行JS交互
本项目环境:使用VS2010(C#)编写的WPF程序,通过CefSharp在程序的窗体中打开网页.需要能够实现网页后台JS代码中调用的方法,从网页接收数据,并能返回数据给网页.运行程序的电脑不允许上网 ...
- 使用urllib2打开网页的三种方法
#coding:utf-8 import urllib2 import cookielib url="http://www.baidu.com" print '方法 1' resp ...
- (转)C#调用默认浏览器打开网页的几种方法
转载,原文地址:http://blog.csdn.net/testcs_dn/article/details/42246969 CSharp调用默认浏览器打开网页的几种方法 示例界面: 方法一:从注册 ...
- 用webBrowser打开网页出现脚本错误怎么办
当IE浏览器遇到脚本错误时,在浏览器左下角会出现一个黄色图标,点击可以查看脚本错误的详细信息,并不会有弹出的错误信息框.我们在用webBrowser编写的程序打开网页,遇到脚本有问题是,会弹出一个错误 ...
- js实现打开网页自动弹出添加QQ好友邀请窗口
我们有时进一些网面或专题页面会自动弹出一个加为好友的对话框了,在研究了很久之后发现可以直接使用js来实现,下面我们一起来看js实现打开网页自动弹出添加QQ好友邀请窗口的方法. 第一步.JS脚本 这个是 ...
随机推荐
- PHP mysql基础操作
mysql连接操作 //建立连接$con = mysql_connect('localhost', 'root', '123456');//判断是否连接成功if($con){ die('连接失败!'. ...
- Python数据库迁移脚本(终极版)
上次的那几个脚本这次全部整合到了一起,而且后面发现了一个可以使用的ODBC包,于是这次采用的方式就很简单了,直接通过ODBC将InterBase数据库中的数据全部取出来之后通过Python的sqlal ...
- css基础2
标准流(normalflow) ◆元素默认的显示方式都是按照标准流的方式显示 ◆块级元素默认独占一行显示===>标准流显示方式 ◆行内元素在一行上显示===> 标准流的显示方式 浮动 ...
- python字典
1.字典解释 映射:通过名字来引用值得数据结构,字典是python中唯一内建的映射类型,字典中的值并没有特殊的顺序,都存储在一个特定的键下,键可以使数字.字符串.元组,通过查找某个特定键,就可以找到对 ...
- 深入分析Java ClassLoader原理
一.什么是ClassLoader? 大家都知道,当我们写好一个Java程序之后,不是管是CS还是BS应用,都是由若干个.class文件组织而成的一个完整的Java应用程序,当程序在运行时,即会调用该程 ...
- Hibernate的实体类为什么要实现Serializable序列化接口?
Hibernate的实体类中为什么要继承Serializable? hibernate有二级缓存,缓存会将对象写进硬盘,就必须序列化,以及兼容对象在网络中的传输 等等. java中常见的几个类(如 ...
- php 获取域名等Url
<?php //获取域名或主机地址 echo $_SERVER['HTTP_HOST']."<br />"; //获取网页地址 echo $_SERVER['PH ...
- poj1664-放苹果(递归)
一,题意: M个苹果放在N个盘子里,允许有盘子空着,问共有多少种不同的分法. 二,思路: 递归的思想求解: 1,有反复执行的过程(调用本身) 第一种情况n>m : 必定有 n-m 个盘子空着,去 ...
- JMeter--集合点设置(转)
集合点:简单来理解一下,虽然我们的"性能测试"理解为"多用户并发测试",但真正的并发是不存在的,为了更真实的实现并发这感念,我们可以在需要压力的地方设置集合点, ...
- Linux下解压命令大全 解压缩 tar bz2 zip tar.gz gz
.tar解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)---------------.gz解压1:gunz ...