首页 > 代码库 > 常用服务器软件nginx、jvm、centOS网络环境等配置

常用服务器软件nginx、jvm、centOS网络环境等配置

nginx配置说明

典型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进行匹配.可以进行重定向或者进行新的代理负载均衡

CentOS配置说明

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让参数生效。

 

JVM 参数配置说明

         我们的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,表明所有agesurvivorspace对象的大小如果超过Desired survivor size,则重新计算threshold,以ageMaxTenuringThreshold的最小值为准,否则以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网络环境等配置