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