性能优化(二)Ubuntu内核、Tomcat优化

内核优化:

网络

tee -a /etc/sysctl.conf <<'EOF'
# 调整提升服务器负载能力之外,还能够防御小流量的Dos、CC和SYN攻击
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
# net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 60
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_fastopen = 3


# 优化TCP的可使用端口范围及提升服务器并发能力(注意一般流量小的服务器上没必要设置如下参数)
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.ip_local_port_range = 1024 65535


# 优化核套接字TCP的缓存区
net.core.netdev_max_backlog = 8192
net.core.somaxconn = 8192
net.core.rmem_max = 12582912
net.core.rmem_default = 6291456
net.core.wmem_max = 12582912
net.core.wmem_default = 6291456
EOF
#配置生效
/sbin/sysctl -p /etc/sysctl.conf
/sbin/sysctl -w net.ipv4.route.flush=1

最大进程数和最大文件打开数

echo "ulimit -HSn 65535" >> /etc/rc.local
echo "ulimit -HSn 65535" >>/root/.bash_profile
echo "ulimit -SHn 65535" >> /etc/profile
ulimit -SHn 65535
tee -a /etc/security/limits.conf <<'EOF'
# ulimit -HSn 65535
# ulimit -HSu 65535
*  soft  nofile  65535
*  hard  nofile  65535
*  soft  nproc   65535
*  hard  nproc   65535
EOF

Tomcat调优:

** JAVA_OPTS **

-server: 启用jdk的server版,一定要作为第一个参数,在多个CPU时性能佳
-Xms: 初始Heap大小,使用的最小内存,cpu性能高时此值应设的大一些
-Xmx: java heap最大值,使用的最大内存,上面两个值是分配JVM的最小和最大内存,取决于硬件物理内存的大小,建议均设为物理内存的一半。 -Xms与-Xmx设成一样的值,避免JVM因为频繁的GC导致性能大起大落
-XX:PermSize:设定内存的永久保存区域
-XX:MaxPermSize:设定最大内存的永久保存区域
-XX:MaxNewSize:
-Xss 15120 这使得JBoss每增加一个线程(thread)就会立即消耗15M内存,而最佳值应该是128K,默认值好像是512k.
+XX:AggressiveHeap 会使得 Xms没有意义。这个参数让jvm忽略Xmx参数,疯狂地吃完一个G物理内存,再吃尽一个G的swap。
-Xss:每个线程的Stack大小
-verbose:gc 现实垃圾收集信息
-Xloggc:gc.log 指定垃圾收集日志文件
-Xmn:young generation的heap大小,一般设置为Xmx的3、4分之一
-XX:+UseParNewGC :缩短minor收集的时间
-XX:+UseConcMarkSweepGC :缩短major收集的时间 提示:此选项在Heap Size 比较大而且Major收集时间较长的情况下使用更合适。

Linux下修改TOMCAT_HOME/bin/catalina.sh
JAVA_OPTS="-server -XX:PermSize=512M -XX:MaxPermSize=1024m -Xms2048m -Xmx2048m
windows下修改TOMCAT_HOME/bin/catalina.bat
set JAVA_OPTS=-server -XX:PermSize=512M -XX:MaxPermSize=1024m -Xms2048m -Xmx2048m

堆内存设置:

-Xms 初始堆大小。如:-Xms256m或2G,默认为物理内存1/64。

-Xmx 最大堆大小。如:-Xmx512m或2G,默认为物理内存1/4。

非堆内存设置:

-XX:PermSize 永久代(方法区)的初始大小,默认为物理内存1/64。

-XX:MaxPermSize 永久代(方法区)的最大值,默认为物理内存1/4。
并发调优
Tomcat配置文件conf/server.xml 中的Connector配置中

连接相关参数

  • acceptCount:允许的最大连接数
  • enableLookups:是否反查域名,取值为: true 或 false 。为了提高处理能力,应设置为 false
  • connectionTimeout:网络连接超时,单位:毫秒。设置为 0 表示永不超时,这样设置有隐患的。通常可设置为 30000 毫秒。

连接器connector的并发处理能力

  • maxThreads 客户请求最大线程数,要根据自己的实际情况合理设置,设置越大会耗费内存和 CPU,因为 CPU 疲于线程上下文切换,没有精力提供请求服务了
  • minSpareThreads Tomcat初始化时创建的 socket 线程数
  • maxSpareThreads Tomcat连接器的最大空闲 socket 线程数(少)
  • enableLookups 若设为true, 则支持域名解析,可把 ip 地址解析为主机名
  • redirectPort 在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口
  • acceptAccount 监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads)
  • connectionTimeout 连接超时
  • URIEncoding URL统一编码

缓存优化

  • compression 打开压缩功能
  • compressionMinSize 启用压缩的输出内容大小,这里面默认为2KB
  • compressableMimeType 压缩类型
  • connectionTimeout 定义建立客户连接超时的时间. 如果为 -1, 表示不限制建立客户连接的时间
<!-- 调优之前的配置 tomcat默认配置
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8"/>
	-->
<!-- 调优之后的配置 -->
    <Connector  port="9027" 
              maxHttpHeaderSize="8192"
              maxThreads="2048"
              minSpareThreads="256"
              enableLookups="false"
              compression="on"
              compressionMinSize="2048"
              compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
              connectionTimeout="20000"
              URIEncoding="utf-8"
              acceptCount="2048"
              redirectPort="8443"
              disableUploadTimeout="true"
              executor="tomcatThreadPool" />

      <Executor name="tomcatThreadPool" 
                namePrefix="catalina-exec-" 
                maxThreads="2048" 
                minSpareThreads="512" 
                prestartminSpareThreads="true" />

注:带宽问题,提升带宽;sql问题,慢sql排查+索引;缓存中间件ehcache

你可能感兴趣的:(性能优化,性能优化,ubuntu,tomcat)