如何提高tomcat的并发能力
1、Apache + Tomcat 结合起来用Apache 负责静态页面,Tomcat负责动态页面,同时减少connectionTimeout的时间,以应对并发量大线程回收来不及的情况。
2、压力过大的问题,可以做负载均衡,一个TOMCAT无论如何也不可能担当如此多的线程负载,而且JVM过大,其内存管理成本将显著加大。2G的内存,做3-4个TOMCAT实例(512RAM*4),更为科学合理。
3、数据库连接池,不少人,都推荐使用C3P0,能提高访问数据库的并发性能好几倍。
4、采用Tomcat集群可以最大程度的发挥服务器的性能,可以在配置较高的服务器上部署多个Tomcat,也可以在多台服务器上分别部署Tomcat,Apache和Tomcat整合的方式还是JK方式。经过验证,系统对大用户量使用的响应方面,Apache+3Tomccat集群> Apache+2Tomcat集群 > Apache集成Tomcat > 单个Tomcat。并且采用Apache+多Tomcat集群的部署方式时,如果一个Tomcat出现宕机,系统可以继续使用,所以在硬件系统性能足够优越的情况下,需要尽量发挥软件的性能,可以采用增加Tomcat集群的方式。
5.1. 设置MPM(Multi Processing Modules多道处理模块)。ThreadPerChild,这个参数用于设置每个进程的线程数,在Windows环境下默认值是64,最大值是1920,建议设置为100-500之间,服务器性能高的话值大一些,反之小一些。MaxRequestPerChild表示每个子进程能够处理的最大请求数。这个参数的值更大程度上取决于服务器的内存,如果内存比较大的话可以设置为很大的参数,否则设置一个较小的值,建议值是3000.
5.2. 关闭DNS和名字解析 HostnameLookups off
5.3. 打开UseCanonicalName模块 UseCanonicalName on
5.4. 关闭多余模块 一般来说,不需要加载的模块有,mod_include.so、mod_autoindex.so、mod_access.so、mod_auth.so.
5.5. 打开KeepAlive支持
KeepAlive on, KeepAliveTimeout 15 MaxKeepAliveRequests 1000
根据实际经验,通过Apache和Tomcat集群的方式提高系统性能的效果十分明显,这种方式可以最大化的利用硬件资源,通过多个Tomcat的处理来分担单Tomcat时的压力。
web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。
DIV+CSS之清除浮动总结
当元素有浮动属性时,会对其父元素或后面的元素产生影响,会出现一个布局错乱的现象,可以通过清除浮动的方法来解决浮动的影响。
浮动的清理(clear):
值:
none:默认值。允许两边都可以有浮动对象;
left:不允许左边有浮动对象;
right:不允许右边有浮动对象;
both:左右两侧不允许有浮动对象。
清除浮动的方法:
第一种:额外标签法
这种方法应该是最简单的一种了,w3c建议在容器的末尾增加一个“clear:both"的元素
强迫容器适应它的高度以便装下所有的float元素。
<div id="main">
<div id="left"></div>
<div id="right"></div>
<div class="clear"></div>
</div>
<div id="footer"></div>
.clear{clear:both;}
第二种:父元素添加overflow:hidden;
注:如果子元素使用了定位布局,就会很难实现。
第三种:利用伪对象after方法
定义一个类,使用伪对象after,控制浮动元素的影响。网上最流行的清除浮动代码:
.clearFix:after{
clear:both;
display:block;
visibility:hidden;
height:0;
line-height:0;
content:'';
}
.clearFix{zoom:1;} /*解决ie6/7兼容问题*/
css溢出的使用
设置对象的内容超过其指定高度及宽度时,如何管理内容。
overflow:visible【默认值,不剪切内容也不添加滚动条】
auto【在必需时,对象内容才会被剪切或添加滚动条】
hidden【不显示超过对象尺寸的内容】
scroll【总是显示滚动条】
zoom属性:只有ie内核的浏览器支持,缩放比例。
设置或检索对象的缩放比例。
语法:normal【默认值,使用对象的实际尺寸】;number【百分数|无符号浮点实数。浮点实数
为1.0或百分数为100%时相当于此属性的normal值
zoom:1解决ie6高度自适应问题。
每天进步一点点。
log4j2 使用详解
log4j升级了,新架构很不错,将安装步骤记录如下:
1、Log4j2的导入
首先到http://logging.apache.org/log4j/2.x/download.html 上下载最新的log4j2的jar包,然后再eclipse中加入log4j-api-2.0-beta2.jar和log4j-core-2.0-beta2.jar,需要注意的是不要将所有jar都导入工程造成不必要的混乱。
2、测试用例
log4j 2.0的使用非常简单,只要用LogManager的getLogger函数获取一个logger,就可以使用logger记录日志,代码如下:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class HelloLog4j {
private static Logger logger = LogManager.getLogger("HelloLog4j");
public static void main(String[] args) {
MyApplication myApplication = new MyApplication();
logger.entry();
logger.info("Hello, World!");
myApplication.doIt();
logger.error("Hello, World!");
logger.exit();
}
}
as3.0全局stage对象
extend You main document class and add there static var , than assing stage on init :
public class Main extends MovieClip {
public static var stage:Stage;
public function Main ():void {
Main.stage = stage;
}
}
and then anywhere in app You can access to stage :
Main.stage.addChild(element)
Apache吃空内存,频繁宕机
公司有台比较老的服务器,Apache/2.0.59 (Unix) PHP/5.1.2
在部署一套内网测试环境时,频繁宕机,开机后不断的吃内存,重启apache之后内存占用会不停的上涨,直到swap用完,直到死机,由于是内网环境,服务器并发和压力都很小。
查看apache错误日志,报大量类似错误:
[Tue Feb 14 14:49:28 2012] [warn] child process 7751 still did not exit, sending a SIGTERM
[Tue Feb 14 14:49:30 2012] [error] child process 7603 still did not exit, sending a SIGKILL
[Tue Feb 14 14:49:30 2012] [error] child process 7614 still did not exit, sending a SIGKILL
后查出来是因为php某一些脚本存在内存泄露的代码段。而apache处理这些代码段的进程的处理请求数被设置为无穷。也就是说这些进程只有在apache重启(stop-start模式)或者服务器重启的情况下才会被kill,否则将一直运行下去,直到耗尽系统的最后一点资源(主要是内存)。
问题分析:
//服务器允许配置的进程数上限
ServerLimit 1500
//设置服务器启动时建立的子进程数量。因为子进程数量动态的取决于负载的轻重,所有一般没有必要调整这个参数。
StartServers 5
//MinSpareServers:设置空闲子进程的最小数量。所谓空闲子进程是指没有正在处理请求的子进程。如果当前空闲子进程数少于MinSpareServers,那么Apache将以最大每秒一个的速度产生新的子进程。
MinSpareServers 5
//设置空闲子进程的最大数量。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。
MaxSpareServers 10
//用于客户端请求的最大接入请求数量(最大线程数)。
MaxClients 1500
//设置每个子进程在其生存期内允许提供的最大请求数量
MaxRequestsPerChild 50
问题解决:
设置 MaxRequestsPerChild 50或30
MaxRequestsPerChild不能太大,也不能设置为0,最好设置为一个相对不大的数字,100内可能就够了,防止httpd进程有意外的内存泄露。