设为首页 收藏本站
查看: 680|回复: 0

[经验分享] Tomcat企业应用实战

[复制链接]
发表于 2018-12-3 09:54:09 | 显示全部楼层 |阅读模式
Tomcat企业应用实战

  
一:安装Tomcat
1.软件下载
  JDK地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
  Tomcat地址: http://tomcat.apache.org/
  
2.安装JAVA
  [  ! -d /app/tools ]  && mkdir  /app/tools  -p
  [root@compute1tools]# tar xf jdk-8u40-linux-x64.tar.gz  -C  /app/
  [root@compute1tools]# ln -sv  /app/jdk1.8.0_40/  /app/jdk
  app/jdk->app/jdk1.8.0_40/
  [root@compute1tools]#
  
  [root@compute1app]# sed -i '$a export JAVA_HOME=/app/jdk\nexport PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin\nexport CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar' /etc/profile
  
  [root@compute1app]# source  /etc/profile
  [root@compute1app]# java  -version
  java version"1.8.0_40"
  Java(TM) SERuntime Environment (build 1.8.0_40-b26)
  Java HotSpot(TM)64-Bit Server VM (build 25.40-b25, mixed mode)
  
3.安装Tomcat多实例
  [root@compute1tools]# tar xf apache-tomcat-7.0.55.tar.gz  -C  /app/
  [root@compute1app]# cp   -a  apache-tomcat-7.0.55/  tomcat7_1
  [root@compute1app]# cp   -a  apache-tomcat-7.0.55/  tomcat7_2
  
二.Tomcat管理界面
  管理页面,可以查看tomcat自身的参数和部署在tomcat下的应用.默认该状态处于禁用状态.要想使用必须更改tomcat-user.xml文件进行开启.
  [root@compute1 app]# sed  -i '36i \n\n'   tomcat7_1/conf/tomcat-users.xml
  
  [root@compute1 app]# tail -n 4  tomcat7_1/conf/tomcat-users.xml
  
  
  
  
  5.启动Tomcat
  /app/tomcat7_1/bin/startup.sh
  6.登录http://IP:8080
  





  

三.Tomcat主配置文件结构和参数解释









  

  port   指定服务器端HTTP端口号
  address:指定连接器监听的地址,默认为所有地址(即0.0.0.0)
  protocol连接器使用的协议,支持HTTP和AJP。AJP是apache和tomcat的连接协议
  minProcessors服务器启动时创建的处理请求的线程数
  maxProcessors最大可以创建的处理请求的线程数
  enableLookups是否查询客户端主机名.线上不开启,性能消耗严重
  redirectPort在处理http请求时,遇到一个SSL请求,将要转发的端口
  acceptCount排队数,超过此数值,不处理
  connectionTimeout指定超时的时间数
  
  
  name:  主机名
  appBase: 网站根目录
  unpackWARS:是否自动解压war包.若为false,则tomcat就在war内加载项目
  autoDeloy:tomcat启动时自动部署项目
  docBase: 应用程序的路径或者是WAR包项目的路径.
  path:表示此web应用程序的url的前缀,这样请求的url为http://localhost:8080/path/****
  reloadable:该参数为true表示.当WEB-INF/lib或者WEB-INF/classes目录中的文件发生变化的时候,会自动加载新的项目.不需要重新启动Tomcat.
  
四.Tomcat容器优化
  
  URIEncoding=”UTF-8”
  Tomcat可以解析中文名的文件的url
maxSpareThreads

  最大空闲线
  minSpareThreads
  最小空闲线
  maxThreads
  Tomcat使用线程来处理每个请求.这个值表示Tomcat建的最大的线程数,即最大并数。
  enableLoopups="false"  
  取消DNS查询
  acceptCount
  当达到maxThreads,求放到队列中去.队列满后,直接refuse connections.
  compression="on"
  打开压缩功能
  compressionMinSize="2048"
  启用压缩出内容大小,里面默认为2KB
  compressableMimeType="text/html,text/xml" 
  压缩类
  

  
五:jvm优化
例子:
export JAVA_OPTS="-server-Xms1400M -Xmx1400M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31-XX:+UseConcMarkSweepGC  -XX:+CMSParallelRemarkEnabled-XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true"
  
  参考: http://blog.csdn.net/lifetragedy/article/details/7708724
  -server
  生产环境下必须打开,多CPU服务器,效果极好
  -Xms与-Xmx
  参考: http://blog.oldboyedu.com/java-tomcat/
  老男孩老师建议:上面两个值是分配JVM的最小和最大内存,取决于硬件物理内存的大小,建议均设为物理内存的一半。
  JVM内存置了,把XmsXmx两个值设成一是最的做法,不要初始化配小点,最大配大点,就完美无瑕了.那就大了.因内存全部达到Xmx会回落.回落cpu行高速运转进行垃圾回收.造成负载增加.Xms和Xmx相同,就无需行内存回落.无法造成负载高的情况.配置Xmx时需要按照下面执行以下.分配太大,可能无法正常使用.
  
  http://s1.运维网.com/wyfs02/M01/7D/60/wKioL1bndNuTN_b5AAByowiOBY4799.png
  

  –Xmn
  设置年轻代大小为512m。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。一般Xmx34分之一
  -Xss
  每个线程的堆栈大小.这个就要依据你的程序,看一个线需要占用多少内存,可能会有多少线程同运行等。一般不易置超1M,要不然容易出out ofmemory而最佳值应该128K,认值好像是512k.
  -XX:+AggressiveOpts
作用如其名(aggressive),启用这个参数,则每当JDK版本升级时,你的JVM都会使用最新加入的优化技术(如果有的话)
  -XX:+UseBiasedLocking
启用一个优化了的线程锁,我们知道在我们的appserver,每个http请求就是一个线程,有的请求短有的请求长,就会有请求排队的现象,甚至还会出现线程阻塞,这个优化了的线程锁使得你的appserver内对线程处理自动进行最优调配
   -XX:PermSize=128M-XX:MaxPermSize=256M
JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;Tomcat8不在支持.
在数据量的很大的文件导出时,一定要把这两个值设置上,否则会出现内存溢出的错误。
由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。
那么,如果是物理内存4GB,那么64分之一就是64MB,这就是PermSize默认值,也就是永生代内存初始大小;
四分之一是1024MB,这就是MaxPermSize默认大小。
   -XX:+DisableExplicitGC
在程序代码中不允许有显示的调用”System.gc()”。看到过有两个极品工程中每次在DAO操作结束时手动调用System.gc()一下,觉得这样做好像能够解决它们的out ofmemory问题一样,付出的代价就是系统响应时间严重降低,就和我在关于Xms,Xmx里的解释的原理一样,这样去调用GC导致系统的JVM大起大落,性能不到什么地方去哟!
   -XX:+UseParNewGC
对年轻代采用多线程并行回收,这样收得快。Tomcat8不在支持.
   -XX:+UseConcMarkSweepGC
即CMS gc,这一特性只有jdk1.5即后续版本才具有的功能,它使用的是gc估算触发和heap占用触发。
我们知道频频繁的GC会造面JVM的大起大落从而影响到系统的效率,因此使用了CMS GC后可以在GC次数增多的情况下,每次GC的响应时间却很短,比如说使用了CMS GC后经过jprofiler的观察,GC被触发次数非常多,而每次GC耗时仅为几毫秒。
   -XX:MaxTenuringThreshold
设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概率。
这个值的设置是根据本地的jprofiler监控后得到的一个理想的值,不能一概而论原搬照抄。
   -XX:+CMSParallelRemarkEnabled
在使用UseParNewGC 的情况下, 尽量减少 mark 的时间
   -XX:+UseCMSCompactAtFullCollection
在使用concurrent gc 的情况下, 防止 memoryfragmention, 对live object 进行整理, 使 memory 碎片减少。
  -XX:LargePageSizeInBytes
指定 Java heap的分页页面大小
   -XX:+UseFastAccessorMethods
get,set方法转成本地代码
  -XX:+UseCMSInitiatingOccupancyOnly
指示只有在 oldgeneration 在使用了初始化的比例后concurrentcollector 启动收集
   -XX:CMSInitiatingOccupancyFraction=70
CMSInitiatingOccupancyFraction,这个参数设置有很大技巧,基本上满足(Xmx-Xmn)*(100-CMSInitiatingOccupancyFraction)/100>=Xmn就不会出现promotion failed。在我的应用中Xmx是6000,Xmn是512,那么Xmx-Xmn是5488兆,也就是年老代有5488 兆,CMSInitiatingOccupancyFraction=90说明年老代到90%满的时候开始执行对年老代的并发垃圾回收(CMS),这时还 剩10%的空间是5488*10%=548兆,所以即使Xmn(也就是年轻代共512兆)里所有对象都搬到年老代里,548兆的空间也足够了,所以只要满 足上面的公式,就不会出现垃圾回收时的promotionfailed;
因此这个参数的设置必须与Xmn关联在一起。
  -Dfile.encoding=utf-8
  JAVA日志字符集
  

  -Duser.timezone=Asia/Shanghai
  JAVA项目时区
  

  -Djava.awt.headless=true
  这个参数一般我们都是放在最后使用的,这全参数的作用是这样的,有时我们会在我们的J2EE工程中使用一些表工具如:jfreechart,用于在web页输GIF/JPG等流,在winodws环境下,一般我们的app server不会碰到什么问题,但是在linux/unix环境下经常会碰到一个exception导致你在winodws发环境下示的好好可是在linux/unix下却示不出来,比如验证码.因此加上个参数以免避这样的情况出现.
  
  
  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-642674-1-1.html 上篇帖子: zabbix监控tomcat(2) 下篇帖子: tomcat 回滚脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表