Linux下jvm与tomcat的安全与优化

上一节我们部署了tomcat服务,大家可以看到这个服务部署起来真的是非常的容易,但前提是你要学好前面的命令基础。今天我打算在上节的基础上给大家加深点儿,给大家讲讲tomcat服务的安全与优化!我们为什么不是把服务搭建好就可以了嘛,怎么还要做安全与优化呢?理论上是把服务部署好就可以了,但是为了我们的服务器运行的更安全更稳定!做安全优化是必须的了!

在上节我们知道jdk是个java虚拟机(JVM),既然是虚拟机,那他就有内存的概念,在Java虚拟机里他们是内存,但是叫法不一样,叫什么呢?看下面:

JVM优化参数名字解释

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.程序计数器

它的作用是当前线程所执行的字节码的行号指示器

  1. 4.java栈

描述的是java 方法执行的内存模型,优点是存取速度比堆快,仅此于寄存器,栈数据可以共享。缺点缺乏灵活性。默认参数,不能动。

  1. 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. 1.复制算法
  2. 2.标记清除算法
  3. 3.标记整理压缩算法

垃圾收集器主要用于新生代和老年代。

常见的垃圾回收器有

Parallel

ParNew

Serial

CMS

开启回收器

-XX:+UseParallelGC

日志格式

-XX:ParallelGCThreads=20 -Xloggc:/var/log/gc/gc_log"

此篇文章重在理解上面的图,然后大家根据图来在自己实际的生产环境中做相应的参数配置,标准就按照上面的基准做就可以啦!是不是也很简单啊!

下面看下我们的tomcat优化

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来提供超强的可伸缩性和性能,更好地集成本地服务器技术.

我们实际生产中就按照上面的标准做安全优化即可,注意我这里提醒下大家,当你在上真机的时候,考虑下现在本地模拟环境下做好测试没有问题在把配置参数搬到真机上面去就好了!

时间: 2025-01-08 06:22:22

Linux下jvm与tomcat的安全与优化的相关文章

Linux下jvm、tomcat、mysql、log4j优化配置

小菜一直对操作系统心存畏惧,以前也很少接触,这次创业购买了Linux云主机,由于木有人帮忙,只能自己动手优化服务器了.... 小菜的云主机配置大致为:centeos6(32位),4核心cpu,4G内存,5M独享带宽. 一.jvm内存优化方案. 要优化服务器,首先从jvm入手,分配好jvm内存,配置方案如下: declare -x JAVA_OPTS="-server -Xms1280M -Xmx1280M -Xmn512M -Xss1024k -XX:+AggressiveOpts -XX:+U

Linux下设置监控tomcat端口脚本,优化版

领导要求脚本要长时间在系统后台运行,于是修改了上次的脚本,加了守护进程.我的脚本如下: #!/bin/bash echo "Start" URL="http://127.0.0.1:8080/" curlit() { #echo "??" curl --connect-timeout 10 --max-time 20 --head --silent "$URL" | grep '200' # 上面的15是连接超时时间,若访问l

linux 下安装 jdk tomcat 并配置

linux下安装TOMCAT与JDK 第1步:新建boss用户,用户名:boss,密码:boss 第2步:将安装用户路径设置成/app/boss [[email protected]]# useradd-d /app/boss -m boss [[email protected]]# passwdboss Changing password for user boss. New password:  boss passwd: all authentication tokens updated s

linux下安装配置tomcat以及tomcat开机自启配置

Linux下Tomcat安装配置以及Windows不能连接服务器Tomcat解决方案 一.从官方网站上下载tomcat软件包. 官网地址: http://tomcat.apache.org/ 点击左侧的 download的一个版本,我选择的是 tomcat7.0,选择一个后缀名为.tar.gz文件直接下载到本地. 二.通过工具SSH Secure 上传至linux服务器中,进行解压 解压tomcat压缩文件: #tar zxvf apache-tomcat-7.0.53.tar.gz 将解压后的

Linux下如何查看tomcat是否启动

Linux下如何查看tomcat是否启动 在Linux系统下,重启Tomcat使用命令的操作! 首先,进入Tomcat下的bin目录 cd /usr/local/tomcat/bin 使用Tomcat关闭命令 ./shutdown.sh 查看Tomcat是否以关闭 ps -ef|grep java 如果显示以下相似信息,说明Tomcat还没有关闭 root 7010 1 0 Apr19 ? 00:30:13 /usr/local/java/bin/java -Djava.util.logging

Linux下如何查看tomcat是否启动/系统日志等

1.在Linux系统下,重启Tomcat使用命令操作的!  方法一: 首先,进入Tomcat下的bin目录 cd /usr/local/tomcat/bin 使用Tomcat关闭命令 ./shutdown.sh 查看Tomcat是否以关闭 ps -ef|grep java 如果显示以下相似信息,说明Tomcat还没有关闭 root 7010 1 0 Apr19 ? 00:30:13 /usr/local/java/bin/java -Djava.util.logging.config.file=

Linux下定时重启Tomcat(修改)

1.写一个shell脚本test.sh,重新启动tomcat [java] view plaincopy #!/bin/sh . /etc/profile pid=`ps aux | grep tomcat | grep -v grep | grep -v retomcat | awk '{print $2}'` echo $pid if [ -n "$pid" ] then { echo ===========shutdown================ /opt/tomcat/

Linux 下centos7启动 Tomcat 抛出Can&#39;t connect to X11 window server 问题的解决方法

1 问题 今天启动 Tomcat 后,登录页验证码不见了.在 localhost.xxx.log 发现以下错误: org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [StickyCaptcha] in context with path [/web2] threw exception [Servlet execution threw an exception] with root

linux下安装jdk+tomcat+eclipse+mysql

我的环境:主机是win7的,虚拟机是VWare  Workstation 6.0   ,linux系统为Red Hat Enterprise  Linux 5 64位 各软件版本:jdk是jdk-6u35-linux-x64.bin,tomcat是apache-tomcat-6.0.35.tar.gz,数据库为mysql是mysql-5.5.27-linux2.6-x86_64.tar.gz,eclipse是eclipse-jee-juno-linux-gtk-x86_64.tar.gz(各个软