标签:
典型nginx配置文件请参考文件说明。这里只解释nginx负载均衡功能实现。
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
例如:
upstream bakend{
server192.168.159.10 weight=10;
server192.168.159.11 weight=10;
}
3、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
例如:
upstreamresinserver{
ip_hash;
server192.168.159.10:8080;
server192.168.159.11:8080;
}
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstreamresinserver{
server server1;
server server2;
fair;
}
5、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
upstreamresinserver{
serversquid1:3128;
serversquid2:3128;
hash$request_uri;
hash_method crc32;
}
tips:
upstreamresinserver{#定义负载均衡设备的Ip及设备状态
ip_hash;
server127.0.0.1:8000 down;
server127.0.0.1:8080 weight=2;
server127.0.0.1:6801;
server127.0.0.1:6802 backup;
}
在需要使用负载均衡的server中增加
proxy_passhttp://resinserver/;
每个设备的状态设置为:
1.down 表示单前的server暂时不参与负载
2.weight 默认为1.weight越大,负载的权重就越大。
3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间。
5.backup:其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
nginx支持同时设置多组的负载均衡,用来给不用的server来使用。
client_body_in_file_only设置为On 可以讲client post过来的数据记录到文件中用来做debug
client_body_temp_path设置记录文件的目录 可以设置最多3层目录
location 对URL进行匹配.可以进行重定向或者进行新的代理负载均衡1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
例如:
upstream bakend{
server192.168.159.10 weight=10;
server192.168.159.11 weight=10;
}
3、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
例如:
upstreamresinserver{
ip_hash;
server192.168.159.10:8080;
server192.168.159.11:8080;
}
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstreamresinserver{
server server1;
server server2;
fair;
}
5、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
upstreamresinserver{
serversquid1:3128;
serversquid2:3128;
hash$request_uri;
hash_methodcrc32;
}
tips:
upstreamresinserver{#定义负载均衡设备的Ip及设备状态
ip_hash;
server127.0.0.1:8000 down;
server127.0.0.1:8080 weight=2;
server127.0.0.1:6801;
server127.0.0.1:6802 backup;
}
在需要使用负载均衡的server中增加
proxy_passhttp://resinserver/;
每个设备的状态设置为:
1.down 表示单前的server暂时不参与负载
2.weight 默认为1.weight越大,负载的权重就越大。
3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间。
5.backup:其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
nginx支持同时设置多组的负载均衡,用来给不用的server来使用。
client_body_in_file_only设置为On 可以讲client post过来的数据记录到文件中用来做debug
client_body_temp_path设置记录文件的目录 可以设置最多3层目录
location 对URL进行匹配.可以进行重定向或者进行新的代理负载均衡
1> 修改/etc/sysctl.conf配置文件,增加如下参数。
#对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃,不应该大于255,默认值是5,对应于180秒左右时间
net.ipv4.tcp_syn_retries=2
#net.ipv4.tcp_synack_retries=2
#表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为300秒
net.ipv4.tcp_keepalive_time=1200
net.ipv4.tcp_orphan_retries=3
#表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间
net.ipv4.tcp_fin_timeout=30
#表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_syn_backlog = 4096
#表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭
net.ipv4.tcp_syncookies = 1
#表示开启重用。允许将TIME-WAITsockets重新用于新的TCP连接,默认为0,表示关闭
net.ipv4.tcp_tw_reuse = 1
#表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭
net.ipv4.tcp_tw_recycle = 1
##减少超时前的探测次数
net.ipv4.tcp_keepalive_probes=5
##优化网络设备接收队列
net.core.netdev_max_backlog=3000
2> 修改完之后执行/sbin/sysctl-p让参数生效。
我们的JAVA服务器主要是运行tomcat服务器。这里我就以tomcat为例设置JVM参数使之生效。
1> 进入tomcat根目录,执行命令:# vi bin/catalina.sh
2> 添加参数
JAVA_OPTS="-server -verbose:gc -Xloggc:/usr/local/apache-tomcat-7.0.53/logs/gc.log -Xms1024M –Xmx1024M –Xmn512M-XX:MaxDirectMemorySize=256m -XX:MaxTenuringThreshold=1 -XX:SurvivorRatio=30-XX:TargetSurvivorRatio=50 -Xnoclassgc -Xss256K -XX:+PrintGCDetails -XX:+PrintGCTimeStamps-XX:PermSize=256m -XX:MaxPermSize=256m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC-XX:CMSInitiatingOccupancyFraction=80 -XX:ParallelGCThreads=4-XX:ConcGCThreads=4 -XX:+CMSParallelRemarkEnabled -XX:+CMSScavengeBeforeRemark-XX:+ExplicitGCInvokesConcurrent -XX:+UseTLAB -XX:TLABSize=64K "
如图:
3> 保存退出,并重启tomcat即可
JVM参数设置详解:
-server 表示为服务器端,会提供很多服务器端默认的配置,如并行回收,而服务器上一般这个参数都是默认的,所以都是可以省掉,与之对应的还有一个-client参数,一般在64位机器上,JVM是默认启动-server参数,也就是默认启动并行GC的,但是是ParallelGC而不是ParallelOldGC,两者算法不同(后面会简单说明下),而比较特殊的是windows 32位上默认是-client,这两个的区别不仅仅是默认的参数不一样,在jdk包下的jre包下一般会包含client和server包,下面分别对应启动的动态链接库,而真正看到的java、javac等相关命令指示一个启动导向,它只是根据命令找到对应的JVM并传入jvm中进行启动,也就是看到的java.exe这些文件并不是jvm;说了这么多,最终总结一下就是,-server和-client就是完全不同的两套VM,一个用于桌面应用,一个用于服务器的。
-verbose:gc-Xloggc:/usr/local/apache-tomcat-7.0.53/logs/gc.log 表示输出JVM的GC日志并将日志输出到tomcat的logs/gc.log文件上。
-Xms1024M Heap区域的最小值。
-Xmx1024M Heap区域的最大值。
–Xmn512M Heap区新生代内存值大小。
-XX:MaxDirectMemorySize=256m javaNIO中通过Direct内存来提高性能,这个区域的大小默认是64M,在适当的场景可以设置大一些。Tomcat默认是使用BIO场景,但是有些场景使用的是NIO模型。
-XX:MaxTenuringThreshold=1在正常情况下,新申请的对象在Yong区域发生多少次GC后就会被移动到Old(非正常就是S0或S1放不下或者不太可能出现的Eden都放不下的对象),这个参数一般不会超过16(因为计数器从0开始计数,所以设置为15的时候相当于生命周期为16)。要查看现在的这个值的具体情况,可以使用参数:-XX:+PrintTenuringDistribution 。
-XX:SurvivorRatio=30该参数为Eden与两个求助空间之一的比例,注意Yong的大小等价于Eden + S0 +S1,S0和S1的大小是等价的,这个参数为Eden与其中一个S区域的大小比例,如参数为8,那么Eden就占用Yong的80%,而S0和S1分别占用10%。 以前的老版本有一个参数为:-XX:InitialSurivivorRatio,如果不做任何设置,就会以这个参数为准,这个参数的默认值就是8,不过这个参数并不是Eden/Survivor的大小,而是Yong/Survivor,所以所以默认值8,代表每一个S区域的空间大小为Yong区域的12.5%而不是10%。另外顺便提及一下,每次大家看到GC日志的时候,GC日志中的每个区域的最大值,其中Yong的空间最大值,始终比设置的Yong空间的大小要小一点,大概是小12.5%左右,那是因为每次可用空间为Eden加上一个Survivor区域的大小,而不是整个Yong的大小,因为可用空间每次最多是这样大,两个Survivor区域始终有一块是空的,所以不会加上两个来计算。
-XX:TargetSurvivorRatio=50 计算期望存活大小Desired survivor size的参数.。默认值50。计算公式:(survivor_capacity * TargetSurvivorRatio) / 100 * sizeof(a pointer):survivor_capacity(一个survivorspace的大小)乘以TargetSurvivorRatio,表明所有age的survivorspace对象的大小如果超过Desired survivor size,则重新计算threshold,以age和MaxTenuringThreshold的最小值为准,否则以MaxTenuringThreshold为准.
-Xnoclassgc 每次永久存储区满了后一般GC 算法在做扩展分配内存前都会触发一次FULL GC,除非设置了-Xnoclassgc。即禁用GC触发的FULLGC
-Xss256K 单个线程堆栈大小值;JDK5.0 以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
-XX:+PrintGCDetails 输出GC的日志详情,包含了时间戳。主要是输出到控制台和gc日志
-XX:+PrintGCTimeStamps输出GC时暂停的时间。主要是输出到控制台和gc日志
-XX:PermSize=256m配置永久区内存初始值
-XX:MaxPermSize=256m永久区内存最大值
-XX:+UseParNewGC -XX:+UseConcMarkSweepGC 这两个参数组合使用,在young区使用并行GC(Parallel Collector),Old区使用并发GC(CMS Collector)。
-XX:CMSInitiatingOccupancyFraction=80当旧生代使用占到多少百分比时触发CMS GC
-XX:ParallelGCThreads=4 配置并发GC(ParallelGC)的线程数
-XX:ConcGCThreads=4 配置CMS GC的线程数
-XX:+CMSParallelRemarkEnabled 开启并行CMS GC
-XX:+CMSScavengeBeforeRemark为了减少第二次暂停的时间,开启并行remark:-XX:+CMSParallelRemarkEnabled。如果remark还是过长的话,可以开启-XX:+CMSScavengeBeforeRemark选项,强制remark之前开始一次minor gc,减少remark的暂停时间,但是在remark之后也将立即开始又一次minor gc。
-XX:+ExplicitGCInvokesConcurrent修改Nio/RMI里面的system.gc()的引发的行为。默认system.gc()会触发full GC 引发的暂停时间会较长。增加此参数之后,system.gc()引发的是CMS GC。减少DirectMemory OOM几率
-XX:+UseTLAB 启用本地线程私有区域(只有此区域放不下了,才会放到Eden中去申请)。多CPU的环境下使用该参数会比较有效
-XX:TLABSize=64K 设置本地线程私有区域大小
其他说明:
-XX:+UseParNewGC 注意:与它冲突的参数是:-XX:+UseParallelOldGC和-XX:+UseSerialGC,如果需要用这个参数,又想让整个区域是并行回收的,那么就使用-XX:+UseConcMarkSweepGC参数来配合,其实这个参数在使用了CMS后,默认就会启动该参数,也就是这个参数在CMSGC下是无需设置的,后面会提及到这些参数。
-XX:+CMSIncrementalMode 在并发GC下启动增量模式,只能在CMSGC下这个参数才有效。(我担心这种会容易增加内存碎片,此参数系统里面没有使用,需要谨慎实验)
-XX:+CMSIncrementalPacing启动自动调节duty cycle,即在CMS GC中发生的时间比率设置,也就是说这段时间内最大允许发生多长时间的GC工作是可以调整的。
-XX:CMSIncrementalDutyCycleMin=0
-XX:CMSIncrementalDutyCycle=10
在上面这个参数设定后可以分别设置以下两个参数(参数设置的比率,范围为0-100):
常用服务器软件nginx、jvm、centOS网络环境等配置
标签:
原文地址:http://blog.csdn.net/yohoph/article/details/42461521