java調優,java調優命令

本文目錄一覽:

CMS GC啟動參數優化配置

java啟動參數共分為三類;

其一是 標準參數 (-),所有的JVM實現都必須實現這些參數的功能,而且向後兼容;

其二是 非標準參數 (-X),默認jvm實現這些參數的功能,但是並不保證所有jvm實現都滿足,且不保證向後兼容;

其三是 非Stable參數 (-XX),此類參數各個jvm實現會有所不同,將來可能會隨時取消,需要慎重使用;

1.設置環境變量JAVA_OPTS

2.Windows下,在/bin/catalina.bat,Unix下,在/bin/catalina.sh的前面,增加 JAVA_OPTS=』-Xms256m -Xmx512m』

Tomcat 的啟動參數位於安裝目錄 ${TOMCAT_HOME}/bin目錄下, Linux 操作系統就是 catalina.sh 文件。JAVA_OPTS,就是用來設置 JVM 相關運行參數的變量,還可以在 CATALINA_OPTS 變量中設置。關於這 2 個變量,還是多少有些區別的:

JAVA_OPTS:用於當 Java 運行時選項「start」、「stop」或「run」命令執行。

CATALINA_OPTS:用於當 Java 運行時選項「start」或「run」命令執行。

為什麼有兩個不同的變量?它們之間都有什麼區別呢?

首先,在啟動 Tomcat 時,任何指定變量的傳遞方式都是相同的,可以傳遞到執行「start」或「run」命令中,但只有設定在 JAVA_OPTS 變量里的參數被傳遞到「stop」命令中。對於 Tomcat 運行過程,可能沒什麼區別,影響的是結束程序,而不是啟動程序。

第二個區別是更微妙,其他應用程序也可以使用 JAVA_OPTS 變量,但只有在 Tomcat 中使用 CATALINA_OPTS 變量。如果你設置環境變量為只使用 Tomcat,最好你會建議使用 CATALINA_OPTS 變量,而如果你設置環境變量使用其它的 Java 應用程序,例如 JBoss,你應該把你的設置放在JAVA_OPTS 變量中。

我在本地配置的:

其他暫時沒用到的:

Xms與Xmx配置相同的值,為了能夠在GC後不需要重新分隔計算堆區的大小而浪費資源。

JVM系列四:生產環境參數實例及分析【生產環境實例增加中】

jvm的GC日誌分析

JVM常用參數配置

深入了解JVM

JVM參數與實際環境中的優化配置實踐

JVM啟動參數大全

Java服務GC參數調優案例

關鍵業務系統的JVM參數推薦(2018仲夏版)

成為Java GC專家(5)—Java性能調優原則

jvm 內存調優用過哪些工具,jstate 做什麼用的?如何 dump 出當前線程狀態

實例一:Waiting to lock 和 Blocked

“RMI TCP Connection(267865)-172.16.5.25” daemon prio=10 tid=0x00007fd508371000 nid=0x55ae waiting for monitor entry [0x00007fd4f8684000]

java.lang.Thread.State: BLOCKED (on object monitor)

at org.apache.log4j.Category.callAppenders(Category.java:201)

– waiting to lock 0x00000000acf4d0c0 (a org.apache.log4j.Logger)

at org.apache.log4j.Category.forcedLog(Category.java:388)

at org.apache.log4j.Category.log(Category.java:853)

at org.apache.commons.logging.impl.Log4JLogger.warn(Log4JLogger.java:234)

at com.tuan.core.common.lang.cache.remote.SpyMemcachedClient.get(SpyMemcachedClient.java:110)

說明:

1)線程狀態是 Blocked,阻塞狀態。說明線程等待資源超時!

2)「 waiting to lock 0x00000000acf4d0c0」指,線程在等待給這個 0x00000000acf4d0c0 地址上鎖(英文可描述為:trying to obtain 0x00000000acf4d0c0 lock)。

3)在 dump 日誌里查找字符串 0x00000000acf4d0c0,發現有大量線程都在等待給這個地址上鎖。如果能在日誌里找到誰獲得了這個鎖(如locked 0x00000000acf4d0c0 ),就可以順藤摸瓜了。

4)「waiting for monitor entry」說明此線程通過 synchronized(obj) {……} 申請進入了臨界區,從而進入了下圖1中的「Entry Set」隊列,但該 obj 對應的 monitor 被其他線程擁有,所以本線程在 Entry Set 隊列中等待。

5)第一行里,”RMI TCP Connection(267865)-172.16.5.25″是 Thread Name 。tid指Java Thread id。nid指native線程的id。prio是線程優先級。[0x00007fd4f8684000]是線程棧起始地址。

實例二:Waiting on condition 和 TIMED_WAITING

“RMI TCP Connection(idle)” daemon prio=10 tid=0x00007fd50834e800 nid=0x56b2 waiting on condition [0x00007fd4f1a59000]

java.lang.Thread.State: TIMED_WAITING (parking)

at sun.misc.Unsafe.park(Native Method)

– parking to wait for 0x00000000acd84de8 (a java.util.concurrent.SynchronousQueue$TransferStack)

at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)

at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:424)

at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:323)

at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:874)

at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:945)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)

at java.lang.Thread.run(Thread.java:662)

說明:

1)「TIMED_WAITING (parking)」中的 timed_waiting 指等待狀態,但這裡指定了時間,到達指定的時間後自動退出等待狀態;parking指線程處於掛起中。

2)「waiting on condition」需要與堆棧中的「parking to wait for 0x00000000acd84de8 (a java.util.concurrent.SynchronousQueue$TransferStack)」結合來看。首先,本線程肯定是在等待某個條件的發生,來把自己喚醒。其次,SynchronousQueue 並不是一個隊列,只是線程之間移交信息的機制,當我們把一個元素放入到 SynchronousQueue 中時必須有另一個線程正在等待接受移交的任務,因此這就是本線程在等待的條件。

3)別的就看不出來了。

零基礎學習Java編程需要知道的十二個步驟!

一、學習前的準備工作java語言一般用於大型的服務器程序開發,所有有必要了解如下內容:Unix開發環境Unix系統原理、Unix開發環境、Unix常用命令。熟練掌握Unix常用命令;熟練構建下的Java開發環境。二、Java語言基礎的學習階段學習任何一門語言都要打好基礎,曾經學過高級程序語言(C,C++等)來說,java語言基礎有自己的特點,但是基本規律都是相通的,如:算法基礎、常用數據結構、企業編程規範。掌握常見的數據結構和實用算法;培養良好的企業級編程習慣。

三、面向對象語言的共性Java面向對象面向對象特性:封裝、繼承、多態等。掌握面向對象的基本原則以及在編程實踐中的意義;掌握Java面向對象編程基本實現原理。 四、JDK核心API語言核心包、異常處理、常用工具包、集合框架熟練掌握JDK核心API編程技術;理解API設計原則;具備熟練的閱讀API文檔的能力;JavaSE核心異常處理、多線程基礎、IO系統、網絡編程、Swing組件、JVM性能調優(JVM內存結構剖析、GC分析及調優、JVM內存參數優化)、Java泛型、JDK新特性。熟練掌握JavaSE核心內容,特別是IO和多線程;初步具備面向對象設計和編程的能力;掌握基本的JVM優化策略。XMLXML語法、XML解析(SAX、DOM)、Dom4j組件、Digester組件。熟練掌握XML語法規則;理解DOM模型;熟悉Java對XML的各種解析方式。五、SQL語言SQL語句基礎和提高、SQL語句調優熟練的掌握SQL語句;掌握一定的數據庫查詢技巧及SQL語句優化技巧。Oracle數據庫開發Oracle體系結構及系統管理、Oracle數據庫高級編程、數據庫設計基礎。掌握Oracle體系結構及核心編程技術。六、連接數據庫:JDBCJDBC核心API(Connection、Statement、ResultSet)、JDBC優化技術(緩存技術、批處理技術、連接池技術)理解JDBC作為規範的設計原則;熟練掌握JDBCAPI;具備使用JDBC對數據庫進行高效訪問的能力。七、軟件工程基礎軟件過程和軟件活動需求設計、概要設計、詳細設計基本原則和文檔規範;配置管理的基本概念和必要性;CVS基本操作;Ant簡介理解軟件過程的普遍概念和基本的軟件活動;理解迭代的意義;掌握Ant、CVS等常用配置管理及部署工具。八、OOAD及設計模式面向對象基本設計原則、工廠模式、策略模式、適配器模式、代理模式等、門面模式理解面向對象設計的一般原則;理解重用的意義;掌握常見的設計模式。九、HTML/CSSHTML基本文檔結構、掌握CSS基礎語法、關於HTML文檔塊、鏈接、列表、表格、表單等掌握十、Ajax基礎、XHR對象、Ajax設計模式、JSON技術掌握Ajax的基本通信原理;掌握基於XML和JSON的Ajax數據規則。十一、JavaScript框架JQuery、JQuery插件、DWR掌握JQuery核心API;了解JQuery基本設計原則;了解多種JQuery插件;掌握DWR的基本原理及應用技巧。十二、ssh三大框架的學習這是企業實際應用的框架模型:1,Struts2.1.6Struts2核心控制流程、Ognl、Action、Interceptor、,Result、FreeMarker、Struts2標記庫、Struts2擴展、Struts2應用技巧(輸入驗證、消息國際化、文件上傳和下載、防止重複提交等)。熟練掌握Struts2核心要件,特別是Interceptor和Result;掌握基於模板技術的Struts2UI組件;掌握基於Ognl的數據共享方式、掌握Struts2各種定製及擴展方式;熟練掌握基於Struts2的Web開發技巧。2,Hibernate3.2.1ORM概念、Hibernate核心API、Hibernate實體映射技術、Hibernate關係映射技巧、HQL查詢、OSCache及Hibernate緩存技術。重點掌握Hibernate多種關聯映射技巧及其實用背景,做到在合適的時候使用合適的關聯方式;掌握多種Hibernate查詢技巧及優化技術。3,Spring2.5SpringIoc基礎、Ioc注入技巧、對象高級裝配(自動裝配、模板裝配、組件掃描特性、FactoryBean、對象生命周期)、SpringAOP原理、AspectJ、SpringJDBC支持、Spring事務及安全管理;Spring整合Hibernate、Spring整合Struts、SpringMVC簡介。深入理解Ioc和AOP的基本原理和實現方式;熟練掌握SpringIoc及AOP實現方式;熟練掌握Spring事務管理;熟練掌握Spring與其他組件的整合技術。

學java,要注意什麼?

如果想學好java最好注意以下五點:1、做學習計劃並保持自律:在我們學習Java的過程中,盡量減少干擾,把自己的全部注意力集中在Java上。無論你注意力的持續時間是多久,都應該將全部精力放在Java上。千鋒教育就有線上免費Java線上公開課。 2、通過編碼來學習:很多新手在學習Java時都會經歷一個階段,那就是看書、看視頻,一段時間後感覺自己都會了,但是真的要寫代碼卻怎麼都寫不出來,這種情況除了多編碼外,沒有其他方法了。3、手寫代碼:在電腦上敲代碼也很好,當然不反對這種學習方式。但在我們在手寫代碼的時候,會激活機械記憶,能幫助你更好地記住東西。此外,在面試中,很多公司的筆試都會讓你在紙上寫代碼。所以在學習過程中這是初學者一定要具備的專業技能了。4、工作產出:可以將你自己寫的一些代碼、小項目等發佈在公共論壇上,雖然有時候他們給出很嚴厲的評價,但也能進一步指出你的不足,從而加以改正。5、堅持編碼:一定要堅持編碼,從小項目做起,然後慢慢擴大你的項目範圍。如果想了解Java更多相關知識,建議到千鋒教育了解一下。千鋒教育目前在18個城市擁有22個校區,年培養優質人才20000餘人,與國內20000餘家企業建立人才輸送合作關係,院校合作超600所。

tomcat有哪些性能調優方法?

操作系統調優,對於操作系統優化來說,是儘可能的增大可使用的內存容量、提高CPU的頻率,保證文件系統的讀寫速率等。

經過壓力測試驗證,在並發連接很多的情況下,CPU的處理能力越強,系統運行速度越快。

Java虛擬機調優,應該選擇SUN的JVM,在滿足項目需要的前提下,盡量選用版本較高的JVM,一般來說高版本產品在速度和效率上比低版本會有改進。

Web服務器專門處理HTTP請求,應用服務器是通過很多協議為應用提供商業邏輯。

把Apache和Tomcat集成起來,將html和Jsp的功能部分進行明確分工,讓Tomcat只處理Jsp部分,其他的由Apache,IIS等web服務器去處理,由此大大提高Tomcat的運行效率。

如果一個項目中大量使用了靜態頁面、大量的圖片等,並有有較大的訪問量,推薦使用Apache集成Tomcat的方式來提高系統的整體性能。

《Java性能權威指南》txt下載在線閱讀全文,求百度網盤雲資源

《Java性能權威指南》(奧克斯 (Scott Oaks))電子書網盤下載免費在線閱讀

鏈接:

提取碼: mb6j

書名:Java性能權威指南

作者:奧克斯 (Scott Oaks)

譯者:柳飛

豆瓣評分:8.0

出版社:人民郵電出版社

出版年份:2016-3-1

頁數:312

內容簡介:

市面上介紹Java的書有很多,但專註於Java性能的並不多,能遊刃有餘地展示Java性能優化難點的更是鳳毛麟角,本書即是其中之一。通過使用JVM和Java平台,以及Java語言和應用程序接口,本書詳盡講解了Java性能調優的相關知識,幫助讀者深入理解Java平台性能的各個方面,最終使程序如虎添翼。

通過閱讀本書,你可以:

運用四個基本原則最大程度地提升性能測試的效果

使用JDK中自帶的工具收集Java應用的性能數據

理解JIT編譯器的優缺點

調優JVM垃圾收集器以減少對程序的影響

學習管理堆內存和JVM原生內存的方法

了解如何最大程度地優化Java線程及同步的性能

解決Java EE和Java SE應用程序接口的性能問題

改善Java驅動的數據庫應用程序的性能

作者簡介:

Scott Oaks是Oracle公司的一位架構師,專註研究Oracle中間件軟件的性能。加入Oracle之前,他曾於Sun Microsystem公司任職多年,在多個技術領域都有建樹,包括SunOS的內核、網絡程序設計、Windows系統的遠程方法調用(RPC)以及 OPEN LOOK虛擬窗口管理器。1996年,Scott成為Sun公司的Java佈道師,並於2001年加入Sun公司的Java性能小組——從那時起他就一直專註於Java的性能提升。此外,Scott也在O’Reilly出版社出版了多部書籍,包括Java Security、Java Threads、JXTA in a Nutshell和Jini in a Nutshell。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/152952.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-13 06:08
下一篇 2024-11-13 06:08

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發佈。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論