tomcat伺服器占內存怎麼解決
⑴ java&Tomcat 服務下的日誌列印會佔用內存的解決方法及思路
工具/原料tomcatEditPlus方法/步驟怎麼知道tomcat伺服器內存溢出了呢?看一下cmd命令行顯示的內容就知道了,java.lang.OutOfMemoryError:PermGenspace就是內存溢出找到tomcat路徑,用編輯器打開catalina.sh在「echo"UsingCATALINA_BASE:$CATALINA_BASE"」上面加入以下行:JAVA_OPTS="-server-XX:PermSize=64M-XX:MaxPermSize=128m保存後,重新啟動tomcat伺服器,這時候應該正常了,如果還是提示內存溢出,只能是下面的這種情況了內存溢出的另外一種情況就是:電腦內存不夠了!這種情況是很有可能發生了,出現內存溢出的時候大家可以檢查一下。這種電腦內存不夠,只能建議大家給電腦加一根內存條,不加就刪除一些程序,清理一下電腦。
⑵ tomcat 內存溢出怎麼解決
怎麼知道tomcat伺服器內存溢出了呢?看一下cmd命令行顯示的內容就知道了,java.lang.OutOfMemoryError: PermGen space就是內存溢出
找到tomcat路徑,用編輯器打開catalina.sh
在「echo "Using CATALINA_BASE: $CATALINA_BASE"」上面加入以下行:
JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
保存後,重新啟動tomcat伺服器,這時候應該正常了,如果還是提示內存溢出,只能是下面的這種情況了
內存溢出的另外一種情況就是:電腦內存不夠了!這種情況是很有可能發生了,出現內存溢出的時候大家可以檢查一下。
6
這種電腦內存不夠,只能建議大家給電腦加一根內存條,不加就刪除一些程序,清理一下電腦。
⑶ tomcat內存溢出怎麼解決
JVM管理兩種類型的內存,堆和非堆。堆是給開發人員用的上面說的就是,是在JVM啟動時創建;非堆是留給JVM自己用的,用來存放類的信息的。它和堆不同,運行期內GC不會釋放空間。一、內存溢出類型1、java.lang.OutOfMemoryError:PermGenspaceJVM管理兩種類型的內存,堆和非堆。堆是給開發人員用的上面說的就是,是在JVM啟動時創建;非堆是留給JVM自己用的,用來存放類的信息的。它和堆不同,運行期內GC不會釋放空間。如果webapp用了大量的第三方jar或者應用有太多的class文件而恰好MaxPermSize設置較小,超出了也會導致這塊內存的佔用過多造成溢出,或者tomcat熱部署時侯不會清理前面載入的環境,只會將context更改為新部署的,非堆存的內容就會越來越多。PermGenspace的全稱是PermanentGenerationspace,是指內存的永久保存區域,這塊內存主要是被JVM存放Class和Meta信息的,Class在被Loader時就會被放到PermGenspace中,它和存放類實例(Instance)的Heap區域不同,GC(GarbageCollection)不會在主程序運行期對PermGenspace進行清理,所以如果你的應用中有很CLASS的話,就很可能出現PermGenspace錯誤,這種錯誤常見在web伺服器對JSP進行precompile的時候。如果你的WEBAPP下都用了大量的第三方jar,其大小超過了jvm默認的大小(4M)那麼就會產生此錯誤信息了。一個最佳的配置例子:(經過本人驗證,自從用此配置之後,再未出現過tomcat死掉的情況)setJAVA_OPTS=-Xms800m-Xmx800m-XX:PermSize=128M-XX:MaxNewSize=256m-XX:MaxPermSize=256m2、java.lang.OutOfMemoryError:Javaheapspace第一種情況是個補充,主要存在問題就是出現在這個情況中。其默認空間(即-Xms)是物理內存的1/64,最大空間(-Xmx)是物理內存的1/4。如果內存剩餘不到40%,JVM就會增大堆到Xmx設置的值,內存剩餘超過70%,JVM就會減小堆到Xms設置的值。所以伺服器的Xmx和Xms設置一般應該設置相同避免每次GC後都要調整虛擬機堆的大小。假設物理內存無限大,那麼JVM內存的最大值跟操作系統有關,一般32位機是1.5g到3g之間,而64位的就不會有限制了。注意:如果Xms超過了Xmx值,或者堆最大值和非堆最大值的總和超過了物理內存或者操作系統的最大限制都會引起伺服器啟動不起來。垃圾回收GC的角色JVM調用GC的頻度還是很高的,主要兩種情況下進行垃圾回收:當應用程序線程空閑;另一個是java內存堆不足時,會不斷調用GC,若連續回收都解決不了內存堆不足的問題時,就會報outofmemory錯誤。因為這個異常根據系統運行環境決定,所以無法預期它何時出現。根據GC的機制,程序的運行會引起系統運行環境的變化,增加GC的觸發機會。為了避免這些問題,程序的設計和編寫就應避免垃圾對象的內存佔用和GC的開銷。顯示調用System.GC()只能建議JVM需要在內存中對垃圾對象進行回收,但不是必須馬上回收,一個是並不能解決內存資源耗空的局面,另外也會增加GC的消耗。二、JVM內存區域組成簡單的說java中的堆和棧java把內存分兩種:一種是棧內存,另一種是堆內存1、在函數中定義的基本類型變數和對象的引用變數都在函數的棧內存中分配;2、堆內存用來存放由new創建的對象和數組在函數(代碼塊)中定義一個變數時,java就在棧中為這個變數分配內存空間,當超過變數的作用域後,java會自動釋放掉為該變數所分配的內存空間;在堆中分配的內存由java虛擬機的自動垃圾回收器來管理堆的優勢是可以動態分配內存大小,生存期也不必事先告訴編譯器,因為它是在運行時動態分配內存的。缺點就是要在運行時動態分配內存,存取速度較慢;棧的優勢是存取速度比堆要快,缺點是存在棧中的數據大小與生存期必須是確定的無靈活性。java堆分為三個區:New、Old和PermanentGC有兩個線程:新創建的對象被分配到New區,當該區被填滿時會被GC輔助線程移到Old區,當Old區也填滿了會觸發GC主線程遍歷堆內存里的所有對象。Old區的大小等於Xmx減去-Xmnjava棧存放棧調整:參數有+UseDefaultStackSize-Xss256K,表示每個線程可申請256k的棧空間每個線程都有他自己的Stack三、JVM如何設置虛擬內存提示:在JVM中如果98%的時間是用於GC且可用的Heapsize不足2%的時候將拋出此異常信息。提示:HeapSize最大不要超過可用物理內存的80%,一般的要將-Xms和-Xmx選項設置為相同,而-Xmn為1/4的-Xmx值。提示:JVM初始分配的內存由-Xms指定,默認是物理內存的1/64;JVM最大分配的內存由-Xmx指定,默認是物理內存的1/4。默認空餘堆內存小於40%時,JVM就會增大堆直到-Xmx的最大限制;空餘堆內存大於70%時,JVM會減少堆直到-Xms的最小限制。因此伺服器一般設置-Xms、-Xmx相等以避免在每次GC後調整堆的大小。提示:假設物理內存無限大的話,JVM內存的最大值跟操作系統有很大的關系。簡單的說就32位處理器雖然可控內存空間有4GB,但是具體的操作系統會給一個限制,這個限制一般是2GB-3GB(一般來說Windows系統下為1.5G-2G,linux系統下為2G-3G),而64bit以上的處理器就不會有限制了提示:注意:如果Xms超過了Xmx值,或者堆最大值和非堆最大值的總和超過了物理內存或者操作系統的最大限制都會引起伺服器啟動不起來。提示:設置NewSize、MaxNewSize相等,"new"的大小最好不要大於"old"的一半,原因是old區如果不夠大會頻繁的觸發"主"GC,大大降低了性能JVM使用-XX:PermSize設置非堆內存初始值,默認是物理內存的1/64;由XX:MaxPermSize設置最大非堆內存的大小,默認是物理內存的1/4。解決方法:手動設置Heapsize修改TOMCAT_HOME/bin/catalina.bat在「echo"UsingCATALINA_BASE:$CATALINA_BASE"」上面加入以下行:JAVA_OPTS="-server-Xms800m-Xmx800m-XX:MaxNewSize=256m"四、性能檢查工具使用定位內存泄漏:JProfiler工具主要用於檢查和跟蹤系統(限於Java開發的)的性能。JProfiler可以通過時時的監控系統的內存使用情況,隨時監視垃圾回收,線程運行狀況等手段,從而很好的監視JVM運行情況及其性能。1.應用伺服器內存長期不合理佔用,內存經常處於高位佔用,很難回收到低位
⑷ 伺服器內存佔用過高如何解決
伺服器內存佔用過高的解決方法:
1,首先通過任務管理器進行進程排序,查找佔用內存較大的程序進程。一般佔用內存較大的進程有W3WP、sqlserver、mysqld-nt.exe;
2, 站點進程w3wp 可以在cmd命令行中通過 iisapp 命令來對應是那個網站佔用內存較大。可以通過設置回收時間、內存最大使用值或共用進程池來減少內存的佔用,但是如果要保證網站的訪問質量,還是建議升級至更高型號來解決;
3,資料庫 sql server 也可以通過資料庫的企業管理器來設置最大內存佔用,但是如果網站程序必須要佔用較大內存的話,設置後會發生頁面報錯、打不開等問題;
4,MYSQL本身會佔用較大虛擬內存,如果不使用mysql資料庫的話,可以將其停止。
⑸ tomcat內存佔用率高怎麼辦
分析日誌,如果是outofmemory,那就把參數繼續調大。
確定是outofmemory之後,再試試看有沒有優化的可能。
⑹ Tomcat伺服器如何清理緩存
打開tomcat服務安裝目錄,可以看到所有的相關文件目錄
⑺ 如何修改tomcat內存使用情況
Tomcat本身不能直接在計算機上運行,需要依賴於硬體基礎之上的操作系統和一個java虛擬機。JAVA程序啟動時JVM都會分配一個初始內存和最大內存給這個應用程序。這個初始內存和最大內存在一定程度都會影響程序的性能。比如說在應用程序用到最大內存的時候,JVM是要先去做垃圾回收的動作,釋放被佔用的一些內存。所以想調整Tomcat的啟動時初始內存和最大內存就需要向JVM聲明,一般的JAVA程序在運行都可以通過中-Xms -Xmx來調整應用程序的初始內存和最大內存: 這兩個值的大小一般根據需要進行設置。初始化堆的大小執行了虛擬機在啟動時向系統申請的內存的大小。一般而言,這個參數不重要。但是有的應用程序在大負載的情況下會急劇地佔用更多的內存,此時這個參數就是顯得非常重要,如果虛擬機啟動時設置使用的內存比較小而在這種情況下有許多對象進行初始化,虛擬機就必須重復地增加內存來滿足使用。由於這種原因,我們一般把-Xms和-Xmx設為一樣大,而堆的最大值受限於系統使用的物理內存。一般使用數據量較大的應用程序會使用持久對象,內存使用有可能迅速地增長。當應用程序需要的內存超出堆的最大值時虛擬機就會提示內存溢出,並且導致應用服務崩潰。因此一般建議堆的最大值設置為可用內存的最大值的80%。 Tomcat默認可以使用的內存為128MB,在較大型的應用項目中,這點內存是不夠的,需要調大。有以下幾種方法可以選用:第一種方法: Windows下,在文件/bin/catalina.bat,Unix下,在文件/bin/catalina.sh的前面,增加如下設置: JAVA_OPTS=''-Xms【初始化內存大小】 -Xmx【可以使用的最大內存】'' 需要把這個兩個參數值調大。例如: JAVA_OPTS=''-Xms256m -Xmx512m'' 表示初始化內存為256MB,可以使用的最大內存為512MB。第二種方法: 環境變數中設 變數名:JAVA_OPTS 變數值:-Xms512m -Xmx512m第三種方法:前兩種方法針對的是bin目錄下有catalina.bat的情況(比如直接解壓的Tomcat等),但是有些安裝版的Tomcat下沒有catalina.bat,這個時候可以採用如下方法,當然這個方法也是最通用的方法: 打開tomcatHome//bin//tomcat5w.exe,點擊Java選項卡,然後將會發現其中有這么兩項:Initial memory pool和Maximum memory pool.Initial memory pool這個就是初始化設置的內存的大小。Maximum memory pool這個是最大內存的大小 設置完了就按確定然後再重啟TOMCAT你就會發現tomcat中jvm可用的內存改變了 另外需要考慮的是Java提供的垃圾回收機制。虛擬機的堆大小決定了虛擬機花費在收集垃圾上的時間和頻度。收集垃圾可以接受的速度與應用有關,應該通過分析實際的垃圾收集的時間和頻率來調整。如果堆的大小很大,那麼完全垃圾收集就會很慢,但是頻度會降低。如果你把堆的大小和內存的需要一致,完全收集就很快,但是會更加頻繁。調整堆大小的的目的是最小化垃圾收集的時間,以在特定的時間內最大化處理客戶的請求。在基準測試的時候,為保證最好的性能,要把堆的大小設大,保證垃圾收集不在整個基準測試的過程中出現。 如果系統花費很多的時間收集垃圾,請減小堆大小。一次完全的垃圾收集應該不超過 3-5 秒。如果垃圾收集成為瓶頸,那麼需要指定代的大小,檢查垃圾收集的詳細輸出,研究 垃圾收集參數對性能的影響。一般說來,你應該使用物理內存的 80% 作為堆大小。當增加處理器時,記得增加內存,因為分配可以並行進行,而垃圾收集不是並行的。一個要注意的地方:建議把內存的最高值跟最低值的差值縮小,不然會浪費很多內存的, 最低值加大 ,最高值可以隨便設,但是要根據實際的物理內存,如果內存設置太大了,比如設置了512M最大內存,但如果沒有512M可用內存,Tomcat就不能啟動,還有可能存在內存被系統回收,終止進程的情況。
⑻ 怎麼解決伺服器內存佔用過高的問題呢
伺服器內存佔用過高的解決方法:
1,首先通過任務管理器進行進程排序,查找佔用內存較大的程序進程。一般佔用內存較大的進程有W3WP、sqlserver、mysqld-nt.exe;
2, 站點進程w3wp 可以在cmd命令行中通過 iisapp 命令來對應是那個網站佔用內存較大。可以通過設置回收時間、內存最大使用值或共用進程池來減少內存的佔用,但是如果要保證網站的訪問質量,還是建議升級至更高型號來解決;
3,資料庫 sql server 也可以通過資料庫的企業管理器來設置最大內存佔用,但是如果網站程序必須要佔用較大內存的話,設置後會發生頁面報錯、打不開等問題;
4,MYSQL本身會佔用較大虛擬內存,如果不使用mysql資料庫的話,可以將其停止。
⑼ tomcat6.0長期啟動時,會不斷吃內存量
不斷吃內存不是tomcat的問題,而是部署在tomcat中的應用有內存泄漏的問題,
要檢查程序代碼,看是否有外部資源使用完以後沒有及時關閉、釋放。
還有其他代碼邏輯方法的問題,是否導致創建的對象不能及時回收。
可以使用一些內存工具來進行分析、判斷。
⑽ tomcat的內存是怎麼去分配管理的
1、 linux下的tomcat:
修改TOMCAT_HOME/bin/catalina.sh
位置cygwin=false前。
JAVA_OPTS="-server -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m"
2、 如果tomcat 5 注冊成了windows服務,以services方式啟動的,則需要修改注冊表中的相應鍵值。
修改注冊表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat5\Parameters\Java,右側的Options
原值為
-Dcatalina.home="C:\ApacheGroup\Tomcat 5.0"
-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 5.0\common\endorsed"
-Xrs
加入 -Xms256m -Xmx512m
重起tomcat服務,設置生效
3、如果tomcat 6 注冊成了windows服務,或者windows2003下用tomcat的安裝版,
在/bin/tomcat6w.exe里修改就可以了 。