誰在偷你的記憶? 應用服務器版

您創建了一個了不起的應用程序。 您將其投入生產。 您會發現您沒有足夠的可用內存。 即使您的所有測量結果(可能是借助我們的小型公用事業公司進行的測量 )都表明您應該還不錯。

我們計劃發布一系列博客文章,研究堆消失的位置,并從基礎結構版本開始。 Stealing memory 今天的假設–我的應用程序服務器可能會成為消耗我所有寶貴內存的貪婪的混蛋嗎?要找出答案,我們在五臺應用程序服務器上進行了少量測試。

女士們,先生們,讓我們介紹一下參賽者:

  • Oracle Weblogic 12.1.1
  • 玻璃魚 3.1.1.2
  • RedHat JBoss AS 7.1.1
  • Apache Tomcat 7.0.30
  • 碼頭 8.1.7

您可能會說,我們這里將蘋果與橙子進行比較–通過擁有完整的Java EE配置文件(例如Weblogic,Glassfish和JBoss),與Web容器(如Jetty或Tomcat)競爭。 但是–我們已經看不到看到僅運行servlet的IBM或Oracle部署的情況了,因此我們認為在同一頁面上看到所有提到的通用容器將是一個啟發。

在開始進行測量之前,我們想向Weblogic團隊致以一些個人問候。 用于壓縮沒有根文件夾的歸檔文件。 跟蹤地獄實際上是什么,我發現了一些樂趣。 其次,向JBoss致敬。 我花了10分鐘瀏覽他們的網站來了解要下載什么。 非常感謝IBM 。 他們的WebSphere不能安裝在Mac上。

但是我們并不打算讓這個職位成為出色的續集,“ 一切都打破了,沒有人難過” 。 因此,讓我們繼續比賽吧。 到現在為止,我們所有的容器都已下載并準備參與。 我們進行的測試包括每1000毫秒后啟動所有容器并收集數據。 我們非常喜歡這種競賽的科學方法,而且我們也很懶。 這種結合導致我們使用了內部構建的另一個小實用程序 ,并將所有無聊的工作委托給了stats文件。 使用與JVM本身捆綁在一起的JMX API收集了數據。 收集的數據包含可用于JVM的總內存和未分配的內存大小。

所有容器均以“現成的配置”啟動,除了將統計實用程序添加到服務器啟動腳本之外,我們沒有進行任何其他更改。 唯一的例外是Weblogic,其PermGen空間已調整為絕對精度–當我們附加由兩個java類組成的代理時,最后出現一條錯誤消息,提示您增加PermGen的大小。

在整個測試中,我們沒有在服務器上部署任何東西,也沒有以任何方式使用服務器,包括捆綁的管理員實用程序。 在我們使用kill -9 <pid>殺死所有服務器之前,所有服務器都有90分鐘的運行時間。

用于執行測試的機器是運行OS X Mountain Lion的2010年老式64位Macbook Pro。 測試中使用的JVM是Oracle HotSpot 1.6.0_35。

但是足夠的背景。 結果不言自明:

Memory overhead

從圖中可以看出,Tomcat是明顯的贏家,它僅消耗了15.63MB的內存 。 Weblogic要求在圖表的另一端增加兩倍以上的容量,僅為其自身分配33.73MB

老實說,我們最驚訝地發現Jetty僅位于第三名。 在測試之前,我們團隊內部進行的首輪下注顯然使Jetty具有最小的內存占用。 但是,沒有,它只有19.66MB ,在Glassfish和JBoss之間僅排名第三,分別消耗了23.26MB18.89MB

總而言之,即使是我們競爭中的明顯失敗者,也很可能不應對您的應用程序的內存問題負責。 當然,除非您使用的內存非常有限。

我們計劃通過排列流行的框架來繼續該系列,以查看在開始在典型的Java EE應用程序中編寫一行代碼之前會損失多少內存。 您想在比賽中看到什么框架? 通過包含@JavaPlumbr的鳴叫讓我們知道。

參考: 誰在竊取您的記憶? Plumbr博客博客上的JCG合作伙伴 Nikita Salnikov Tarnovski提出 的Application Servers Edition 。

翻譯自: https://www.javacodegeeks.com/2012/12/who-is-stealing-your-memory-the-application-servers-edition.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370580.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370580.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370580.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

遺忘的html標簽

1 <span>x</span><sup>2</sup><span> y10</span> 2 <br> 3 <span>H</span><sub>2</sub><span>O</span> <sup> 標簽可定義上標文本。 包含在 <sup> 標簽和其結束標簽 …

Android四大組件之BroadcastReceiver

什么是BroadcastReceiver? BroadcastReceiver(廣播接收器)&#xff0c;顧名思義&#xff0c;是用來接收廣播的。Android內部實現了一套廣播通信機制&#xff0c;即在某個應用或某個組件注冊廣播接收器&#xff0c;接收特定類型的廣播。當別的應用或組件發送該類型的廣播時&…

mysql數據庫索引頁號為什么從3開始_MySQL數據庫快問快答

原標題&#xff1a;MySQL數據庫快問快答前言今天樓主給大家列一下關于數據庫幾個常見問題的要點&#xff0c;如果大家對其中的問題感興趣&#xff0c;可以自行擴展研究。1. UNION ALL 與 UNION 的區別UNION和UNION ALL關鍵字都是將兩個結果集合并為一個。UNION在進行表鏈接后會…

通過簡單的Spring方面擺脫null參數

什么是世界上最令人討厭的&#xff0c;同時也是最受歡迎的例外&#xff1f; 我敢打賭這是NullPointerException。 NullPointerException可以表示任何東西&#xff0c;從簡單的“ ups&#xff0c;我認為不能為空”到數小時和數天的第三方庫調試&#xff08;我敢于嘗試使用Doze…

java arraylist排序_最全Java集合筆記

集合概述什么是集合集合框架&#xff1a;用于存儲數據的容器。集合框架是為表示和操作集合而規定的一種統一的標準的體系結構。任何集合框架都包含三大塊內容&#xff1a;對外的接口、接口的實現和對集合運算的算法。接口&#xff1a;表示集合的抽象數據類型。接口允許我們操作…

【3】JVM-OutOfMemory異常重現

JVM中常見的OOM&#xff0c;那么如何通過自己編寫代碼產生這些OOM異常呢&#xff1f;通過寫代碼重現異常&#xff0c;是為了避免在工作中寫出有OOM BUG的代碼。之前雖然看過相關文章&#xff0c;但是沒自己寫過這些代碼&#xff0c;這次在編寫的實際過程中&#xff0c;由于和書…

CachedIntrospectionResults 初始化

轉載于:https://www.cnblogs.com/xiluhua/p/7862985.html

為什么有些內聯(行內)元素可以設置寬高?

為什么有些內聯&#xff08;行內&#xff09;元素如img、input可以設置寬高&#xff1f; 在說明之前我們先來了解一些定義。 塊級元素和內聯元素&#xff1a; ①塊級元素總是獨占一行&#xff0c;表現為另起一行開始&#xff0c;而且其后的元素也必須另起一行顯示。 寬度(w…

mongo數據庫和mysql數據庫的區別_Mongodb與mysql數據庫的區別

MySQLMongoDB說明mysqldmongod服務器守護進程mysqlmongo客戶端工具mysqldumpmongodump邏輯備份工具mysqlmongorestore邏輯恢復工具db.repairDatabase()修復數據庫mysqldumpmongoexport數據導出工具sourcemongoimport數據導入工具grant * privileges on *.* to …Db.addUser()Db…

在Eclipse中高效運行HTTP / REST集成測試

最近&#xff0c;我有機會使用由我親愛的Holger Staudacher編寫的OSGi-JAX-RS-Connector庫。 通過連接器&#xff0c;您可以通過將Path注釋的類型注冊為OSGi服務來輕松發布資源-實際上&#xff0c;它工作得很好。 對于我來說&#xff0c;使用普通的JUnit測試編寫驅動的服務類測…

Eclipse安裝TestNG插件

Eclipse安裝TestNG插件 TestNG是什么? TestNG按照其文檔的定義是&#xff1a; TestNG是一個測試框架&#xff0c;其靈感來自JUnit和NUnit的&#xff0c;但引入了一些新的功能&#xff0c;使其功能更強大&#xff0c;使用更方便。 TestNG是一個開源自動化測試框架;TestNG表示下…

basicdatasourcefactory mysql_Java基礎-DBCP連接池(BasicDataSource類)詳解

Java基礎-DBCP連接池(BasicDataSource類)詳解作者&#xff1a;尹正杰版權聲明&#xff1a;原創作品&#xff0c;謝絕轉載&#xff01;否則將追究法律責任。實際開發中“獲得連接”或“釋放資源”是非常消耗系統資源的兩個過程&#xff0c;為了解決此類性能問題&#xff0c;通常…

生物神經網絡衍生出的算法

一個生物神經網絡的基本結構&#xff1a; 生物神經網絡由大量神經元組成&#xff0c;這些神經元之間通過突觸相互連接。神經元可以接收來自其他神經元的信號&#xff0c;并根據信號的強度和類型來調整自己的輸出信號。這種神經元之間的相互連接和信號傳遞形成了生物神經網絡的基…

echart實例數據 本地加載_JVM 類加載概述

來源&#xff1a;SegmentFault 思否社區作者&#xff1a;又壞又迷人JVM簡介JVM是Java Virtual Machine(Java虛擬機)的縮寫&#xff0c;JVM是一種用于計算設備的規范&#xff0c;它是一個虛構出來的計算機&#xff0c;是通過在實際的計算機上仿真模擬各種計算機功能來實現的。Ja…

JPA / Hibernate:基于版本的樂觀并發控制

本文是Hibernate和JPA中基于版本的樂觀并發控制的簡介。 這個概念已經很老了&#xff0c;上面已經寫了很多東西&#xff0c;但是無論如何我都看到了它被重新發明&#xff0c;誤解和濫用。 我在編寫它只是為了傳播知識&#xff0c;并希望引起人們對并發控制和鎖定的興趣。 用例…

高可用集群搭建

高可用集群搭建  創建hadoop賬戶 創建hadoop賬戶&#xff08;#注意&#xff0c;接下來的操作均在hadoop賬戶下運行&#xff09; # useradd hadoop # passwd hadoopsu - hadoopmkdir soft disk1 disk2mkdir -p disk{1,2}/dfs/{dn,nn}mkdir -p disk{1,2}/nodemgr/local 將本地目…

scrt如何切換成英文版_英文版SecureCRT顯示亂碼解決

英文版SecureCRT顯示亂碼解決系統環境&#xff1a;CentOS&#xff15;.&#xff16;以前Linux都是默認安裝在英文環境下&#xff0c;用英文版的SecureCRT查看系統內容輸出的也都是英文的&#xff0c;不會出現亂碼問題。今天同事在服務器安裝時默認選擇了簡體中文&#xff0c;這…

java try catch_Java捕獲異常

大家好&#xff0c;歡迎來到樂字節小樂的Java技術分享園地在Java中&#xff0c;凡是可能拋出異常的語句&#xff0c;都可以用try ... catch捕獲。把可能發生異常的語句放在try { ... }中&#xff0c;然后使用catch捕獲對應的Exception及其子類。多catch語句可以使用多個catch語…

haproxy文件操作

import os #導入os模塊def search(): #定義查找函數 with open(haproxy.txt,r) as f: #只讀方式打開文件 value input(請輸入您…

多語言持久性:帶有MongoDB和Derby的EclipseLink

從現在開始&#xff0c;多語種持久性一直是新聞。 從2011年底開始&#xff0c;在著名的Fowler帖子的推動下&#xff0c;我看到了更多更好的主意。 最新的一個是公司內部的學生項目&#xff0c;我們在其中使用Scala作為后端數據&#xff0c;將數據持久存儲到MongoDB&#xff0c;…