Linux下jvm与tomcat的安全与优化
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux下jvm与tomcat的安全与优化相关的知识,希望对你有一定的参考价值。
上一节我们部署了tomcat服务,大家可以看到这个服务部署起来真的是非常的容易,但前提是你要学好前面的命令基础。今天我打算在上节的基础上给大家加深点儿,给大家讲讲tomcat服务的安全与优化!我们为什么不是把服务搭建好就可以了嘛,怎么还要做安全与优化呢?理论上是把服务部署好就可以了,但是为了我们的服务器运行的更安全更稳定!做安全优化是必须的了!
在上节我们知道jdk是个java虚拟机(JVM),既然是虚拟机,那他就有内存的概念,在Java虚拟机里他们是内存,但是叫法不一样,叫什么呢?看下面:
1.方法区
也称"永久代”、“非堆”它用于存储虚拟机加载的类信息、常量、静态变量、是各个线程共享的内存区域。默认最小值为16MB,最大值为64MB,以通过-XX:PermSize 和-XX:MaxPermSize 参数限制方法区的大小。
2.java堆
也叫做GC堆是java虚拟机所管理的内存中最大的一块内存区域,也是被各个线程共享的内存区域,在JVM启动时创建。该内存区域存放了对象实例及数组(所有new的对象)。其大小通过-Xms(最小值)和-Xmx(最大值)参数设置,-Xms为JVM启动时申请的最小内存,默认为操作系统物理内存的1/64但小于1G,-Xmx为JVM可申请的最大内存,默认为物理内存的1/4 但小于1G 注意实际中不要大于4G,危险!大于4G当在垃圾回收时会出现问题。
3.程序计数器
它的作用是当前线程所执行的字节码的行号指示器
4.java栈
描述的是java 方法执行的内存模型,优点是存取速度比堆快,仅此于寄存器,栈数据可以共享。缺点缺乏灵活性。默认参数,不能动。
5.本地方法栈
与虚拟机栈基本类似,区别在于虚拟机栈为虚拟机执行的java方法服务,而本地方法栈则是为Native方法服务。
优化原因
JDK默认的安装的环境默认参数是为开发环境制定,而非适合生产环境,其内存和线程的配置,默认都很低,容易成为性能瓶颈。
优化参数配置标准
配置对参数
-Xms 初始堆大小
-Xmx 最大堆大小
一般设置为:-Xms=-Xmx
好处是避免每次在GC后,调整堆大小,减少系统内存分配。
年轻代
研究表明大部分对象都是朝生暮死,随生随灭的。所以对于年轻代在GC时都采取复制收集算法;
配置方法是:-Xmn256m 表示年轻代大小
配置标准是:他的大小是Xms的一半
他里面又分里面又分为3个区域:
一个Eden,所有新建对象都会存在于该区
两个Survivor区,用来实施复制算法。
Eden区为对象通常最初分配到的地方,Survivor区分为S0和S1两块大小相等的区域。
持久代
配置参数是-XX:PermSize设置持久代(perm gen)初始值
-XX:MaxPermSize设置持久代最大值
配置持久代的标准是-XX:PermSize的值等于-XX:MaxPermSize 因为持久代的调整也会导致堆内存需要触发GC(垃圾回收)
他的作用是存放class,method元信息,一版设置128M就足够了,设置的原则是预留30%的空间。
JVM内存垃圾回收(GC)
GC他就是一个内存管理机制,JVM是先通过一些算法将垃圾收集起来
垃圾收集算法有:
引用计数算法
根据搜索算法
JVM垃圾回收算法:
1.复制算法
2.标记清除算法
3.标记整理压缩算法
垃圾收集器主要用于新生代和老年代。
常见的垃圾回收器有
Parallel
ParNew
Serial
CMS
开启回收器
-XX:+UseParallelGC
日志格式
-XX:ParallelGCThreads=20 -Xloggc:/var/log/gc/gc_log"
此篇文章重在理解上面的图,然后大家根据图来在自己实际的生产环境中做相应的参数配置,标准就按照上面的基准做就可以啦!是不是也很简单啊!
tomcat默认参数是为开发环境制定,而非适合生产环境,尤其是内存和线程的配置,默认都很低,容易成为性能瓶颈。
优化参数详解
1.更改<Serverport="8005" shutdown="SHUTDOWN" debug="0">标签
<Server port="8050" shutdown="AABB"debug="0">,防止黑客扫描
2.更改<Connectorport="8009" protocol="AJP/1.3"redirectPort="8443" />标签
<Connector port="8090" protocol="AJP/1.3"redirectPort="8443" />防止黑客入侵
3.降权运行tomcat
不用root用户启动tomcat
4.更改站点目录
在server.xml下添加
<Contextpath="" docBase="/home/webapps/sp2p_web"reloadable="true"></Context>
5.删除默认webapp下的文件
此目的是防止软件漏
6.版本信息隐藏
修改conf/web.xml,重定向403,404以及500等错误页面。
不要在tomcat中配,在网页工程中的web.xml中配置:
<!-- 403 禁止访问 -->
<error-page>
<error-code>403</error-code>
<location>/page/error/403.jsp</location>
</error-page>
<!-- 404 未找到访问的资源不存在 -->
<error-page>
<error-code>404</error-code>
<location>/page/error/404.jsp</location>
</error-page>
<!-- 500 内部服务器错误 -->
<error-page>
<error-code>500</error-code>
<location>/page/error/500.jsp</location>
</error-page>
7.禁用DNS查询
修改server.xml文件中的Connector元素,修改属性enableLookups参数值:enableLookups="false"
8.设置session过期时间
conf\web.xml中通过参数指定:
<session-timeout>60</session-timeout>
9.Apr插件提高Tomcat性能
Tomcat可以使用APR来提供超强的可伸缩性和性能,更好地集成本地服务器技术.
我们实际生产中就按照上面的标准做安全优化即可,注意我这里提醒下大家,当你在上真机的时候,考虑下现在本地模拟环境下做好测试没有问题在把配置参数搬到真机上面去就好了!
本文出自 “乐乐快跑” 博客,请务必保留此出处http://10851431.blog.51cto.com/10841431/1750468
以上是关于Linux下jvm与tomcat的安全与优化的主要内容,如果未能解决你的问题,请参考以下文章
大数据技术之_30_JVM学习_01_JVM 位置+JVM 体系结构概览+堆体系结构概述+堆参数调优入门+JVM 的配置和优化+Tomcat 的配置和优化