0530课的学习任务 + 课堂笔记

1、tomcat 的重要性

2、学习重点:tomcat 安装、tomcat 常用配置、日志配置以及查看、JVM调优

3、tomcat 和 JVM 关系

https://github.com/aminglinux/tomcat

JAVAEE 企业版 做网站

JAVASE 标准版 做电脑软件

JAVAME 微型版 做手机软件

JDK java开发和运行环境  JDK =java开发工具 + JRE


★如果8005端口不启动,访问8080不正常,并且也无法shutdown

解决办法如下:

编辑$JAVA_HOME/jre/lib/security/Java.security

将securerandom.source=file:/dev/random,改为

securerandom.source=file:/dev/urandom


1、tomcat  单机多实例

http://www.ttlsa.com/tomcat/config-multi-tomcat-instance/

·安装 tomcat

·tomcat 目录创建两个网站目录

·将 conf、logs、webapp、temp、work 分别拷贝两个目录中去

·在两个目录中分别配置 server.xml

·配置多实例启动脚本,两个目录下分别创建 tomcat.sh

·启动脚本赋权限

·分别 cd 到 tomcat.sh 所在目录下在执行 tmocat.sh


2、tomcat的 jvm 设置和连接数设置

http://www.cnblogs.com/bluestorm/archive/2013/04/23/3037392.html

1)、错误提示:java.lang.OutOfMemoryError: Java heap space

Linux 环境下修改“%TOMCAT_HOME%\bin\catalina.sh”文件

在文件开头增加如下设置:JAVA_OPTS=’-Xms256m -Xmx512m’

其中,-Xms设置初始化内存大小,-Xmx设置可以使用的最大内存。

2)、错误提示:java.lang.OutOfMemoryError: PermGen space

在catalina.sh的第一行增加:

JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -

XX:MaxPermSize=256m

3)、JVM设置

堆的尺寸

-Xmssize in bytes

设定Java堆的初始尺寸,缺省尺寸是2097152 (2MB)。这个值必须是1024个字节(1KB)的倍数,且比它大。(-server选项把缺省尺寸增加到32M。)

-Xmnsize in bytes

为Eden对象设定初始Java堆的大小,缺省值为640K。(-server选项把缺省尺寸增加到2M。)

-Xmxsize in bytes

设定Java堆的最大尺寸,缺省值为64M,

Tomcat连接数设置

在tomcat配置文件server.xml中的<Connector ... />配置中,和连接数相关的参数有:

minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10

maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75

acceptCount:允许的最大连接数,应大于等于maxProcessors,默认值为100

enableLookups:是否反查域名,取值为:true或false。为了提高处理能力,应设置为false

connectionTimeout:网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒

·其中和最大连接数相关的参数为maxProcessors和acceptCount。如果要加大并发连接数,应同时加大这两个参数


3、jmx 监控 tomcat

http://ask.apelearn.com/question/23469

JMX是Java Management Extensions的简写,翻译为Java管理扩展。JMX主要用来帮助我们监控JVM(java虚拟机)。

如何Tomcat服务器上开启JMX?

1)编辑catalina.sh

# vim /usr/local/tomcat/bin/catalina.sh

# 在#!/bin/bash下面增加:

export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote

-Djava.rmi.server.hostname=192.168.18.101

-Dcom.sun.management.jmxremote.port=9999

-Dcom.sun.management.jmxremote.ssl=false

-Dcom.sun.management.jmxremote.authenticate=false"

2)重启Tomcat

# /usr/local/tomcat/bin/shutdown.sh

# /usr/local/tomcat/bin/startup.sh

3)检测监听端口

# netstat -ltnp |grep 9999

windows上安装一个Jconsole

-- 安装后,找到jdk安装路径,进入bin文件夹,然后找到jconsole.exe文件双击运行起。输入JMX的IP:Port连接

-- 然后点击“不安全的连接”,进入Jconsole界面:

-- 这样可以看到内存、线程、类等信息


4、jvm 性能调优监控工具 jps/jstack/jmap/jhat/jstat

http://blog.csdn.net/wisgood/article/details/25343845

http://guafei.iteye.com/blog/1815222

现实企业级Java开发中碰到的问题:

OutOfMemoryError,内存不足

内存泄露

线程死锁

锁争用(Lock Contention)

Java进程消耗CPU过高

1)jps

jps [options] [hostid]

如果不指定hostid就默认为当前主机或服务器。

-q 不输出类名、Jar名和传入main方法的参数

-m 输出传入main方法的参数

-l 输出main类或Jar的全限名

-v 输出传入JVM的参数

2)jstack

jstack主要用来查看某个Java进程内的线程堆栈信息。语法格式如下:

jstack [option] pid

jstack [option] executable core

jstack [option] [server-id@]remote-hostname-or-ip

-l long listings,会打印出额外的锁信息,在发生死锁时可以用jstack -l pid来观察锁持有情况

-m mixed mode,不仅会输出Java堆栈信息,还会输出C/C++堆栈信息(比如Native方法)

3)jmap、jhat

jmap(Memory Map)和jhat(Java Heap Analysis Tool)

jmap用来查看堆内存使用状况,一般结合jhat使用

4)jstat(JVM统计监测工具)

语法格式如下:

jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]


5、gvm gc 相关

http://www.cnblogs.com/Mandylover/p/5208055.html

http://blog.csdn.net/yohoph/article/details/42041729

1.程序运行过程当中,会创建大量对象,大部分是短周期对象,小部分是长周期对象,对于短周期的对象,需要频繁进行垃圾回收以保证无用对象尽早被释放掉,长周期对象,不需要频繁垃圾回收以确保无谓地垃圾扫描检测。为解决这种矛盾,Sun JVM的内存管理采用分代的策略。

1)年轻代(Young Gen)

2)年老代(Tenured Gen)

3)持久代(Perm Gen)

2.总结

1)对象优先在Eden分配,这里大部分对象具有朝生夕灭的特征,Minor GC主要清理该处

2)大对象(占内存大)、老对象(使用频繁)

3)Survivor无法容纳的对象,将进入老年代,Full GC的主要清理该处

tomcat内存溢出

https://blog.csdn.net/ye1992/article/details/9344807



猜你喜欢

转载自blog.51cto.com/11530642/2402945