上一節我們部署了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來提供超強的可伸縮性和性能,更好地集成本地服務器技術.
我們實際生產中就按照上面的標準做安全優化即可,注意我這裏提醒下大家,當你在上真機的時候,考慮下現在本地模擬環境下做好測試沒有問題在把配置參數搬到真機上面去就好了!