導航:首頁 > 萬維百科 > cms內存收集

cms內存收集

發布時間:2020-12-31 19:52:30

1、cms gc過程中哪幾個階段暫停應用程序

問題解決:中間調整過幾次,先搞了幾台機器做了驗證,後來逐步推廣的。
1、調大heap區,由原來的4g,調整到5g,young區的大小不變,還是2g,這時候old區就由2g變為3g了(這樣保證old區有足夠的空間);
2、設置-XX:UseCMSInitiatingOccupancyOnly,其實這個不關這個問題,只是發現半夜CMS進行的有點頻繁,就禁止掉了悲觀策略;
3、設置CMS區回收的比例,從80%調整到75%,讓old區盡早的進行,有足夠的空間剩餘;

為什麼要有GC(垃圾回收)?

JVM通過GC來回收堆和方法區中的內存,GC的基本原理就是找到程序中不再被使用的對象,然後回收掉這些對象佔用的內存。

2、帝國cms全動態頁面消耗系統內存嗎?

您好,消耗系統內存,希望可以幫助到您,謝謝~

3、手機內存里的cmsbrw是啥東西,有啥用,能刪了不?

這個文件夾是臨時文件夾,可以刪除。
cmsbrw文件夾,是存放WAP上網時臨時文件的文件夾,可以刪除掉。

手機使用的時間長了,會有大量的垃圾文件文件夾。建議安裝一個比較好的垃圾清理軟體,經常清一清垃圾、無用文件和無用緩存。比如SD女僕、獵豹清理大師等。如果空間太緊張,就用它們的深度清理功能。一些臨時文件夾會被自動清除。

4、筆記本內存條型號前面的字母CMSG和CMSO是什麼意思有什麼區別

沒有什麼意思copy,就是海盜船內存的命名方式罷了,這是屬於海盜船vs系列的命名前綴,VS為品質出色的普通裝機內存,還有一個系列是XMS系列(比較高端),具體後面有點小復雜,不要在意那麼多。也不知道誰起的這種命名規則,我只想說很操蛋。

5、監控cms 軟體太佔用內存,怎麼使用快捷方式

在區域網看的話,直接在瀏覽器輸入硬碟錄像機的ip

6、CMS GC會不會回收Direct ByteBuffer的內存

Oracle JDK 6u32前的版本不會。

Direct ByteBuffer是在Java Heap外分配內存,NIO等東西里使用的比較多,但Direct ByteBuffer分配出去的內存其實也是由GC負責回收的,而不像之前一篇文章里的Unsafe是完全自行管理的,Hotspot在GC時會掃描Direct ByteBuffer對象是否有引用,如沒有則同時也會回收其佔用的堆外內存,但不幸的是在6u32前的版本里,CMS GC有bug會導致可能回收不掉,具體的bug id為 7112034 ,在鏈接的Backport信息里,可以看到這個bug是在hotspot 20.7的版本里修復的(hotspot的版本號通過java -version的最後一行Java Hotspot Version之類的可以看到),6u32帶的就是這個版本,所以6u32是會回收的。

回收不掉的情況下會造成的問題是明明已經不用了,但堆外內存仍然被消耗掉,悲慘的情況下可能會導致堆外內存耗光。

Direct ByteBuffer除了上面這個bug可能造成堆外內存耗光外,還有一種場景也可能會造成堆外內存耗光,如Direct ByteBuffer對象晉升到了Old區,那這個時候就只能等Full GC觸發(CMS GC的情況下等CMS GC),因此在Direct ByteBuffer使用較多,存活時間較長的情況下,有可能會導致堆外內存耗光(因為Direct ByteBuffer本身對象所佔用的空間是很小的)。

對於上面這種類型的應用,最好是在啟動參數上增加-XX:MaxDirectMemorySize=x[m|g],例如-XX:MaxDirectMemorySize=500m

這個參數默認的大小是-Xmx的值(在沒設置MaxDirectMemorySize參數的情況下,用jinfo -flag等方式會看到默認值是-1,但VM.maxDirectMemory這個方法里發現是-1,則會以-Xmx作為默認值),此參數的含義是當Direct ByteBuffer分配的堆外內存到達指定大小後,即觸發Full GC(這段邏輯請見Bits.reserveMemory的代碼),如Full GC後仍然分配不出Direct ByteBuffer需要的空間,則會報OOM錯誤:
java.lang.OutOfMemoryError: Direct buffer memory

因為上面所說的狀況,如碰到堆外內存佔用較多的場景,可以嘗試強制執行Full GC(強制的方法為執行jmap -histo:live)看看,多執行一兩次,如堆外內存下降的話,很有可能就是Direct ByteBuffer造成的,對於這種情況,通常加上上面的啟動參數就可解決。

7、為什麼CMSComm串口控制項會造成內存泄漏

基於VC的串列通信技術應用實例
(中國計算機報 李湘江 2001年10月25日 17:33)在工業控制中,串口是常用的計算機與外部串列設備之間的數據傳輸通道,由於串列通信方便易行,所以應用廣泛。 本文將介紹在Windows平台下串列通信的工作機制和用Visual C++設計串列通信程序的編程方法及通信方式。 VC中實現串列通信的編程技術
以下我們將介紹VC中幾種實現串列通信的編程技術: 利用VC++的標准通信函數 利用VC++的標准通信函數_inp和_outp可實現串口通信。下面是一個串口初始化的程序: void init_com(PORT)
{char i;
outp(PORT+3,0x80);
outp(PORT,0x0C);
outp(PORT+1,0);
outp(PORT+3 ,0x3a);
outp(PORT+3 ,0x03);
i=inp(PORT+5) && 0xfe;
outp(PORT+5,i);} 使用串列通信控制項MSComm 串列通信控制項MSCOmm32.OCX提供了使用RS-232來進行數據通信的所有協議,VC為該控制項提供了標準的事件處理函數、過程,並通過屬性和方法提供了串列通信的設置。它使用戶能夠方便地訪問Windows串列通信驅動程序的大多數特性,包括輸入、輸出緩沖區的大小及決定何時使用流控制命令掛起數據傳輸等。 在ClassWizard中為新創建的通信控制項定義成員對象(CMSComm m_Serial),通過該對象便可以對串口屬性進行設置,MSComm控制項共有27個屬性。以下是通過設置控制項屬性對串口進行初始化的實例: BOOL CSampleDlg:: PortOpen()
{ BOOL m_Opened;
......
m_Serial.SetCommPort(2); // 指定串口號
m_Serial.SetSettings("4800,N,8,1");
// 通信參數設置
m_Serial.SetInBufferSize(1024);
// 指定接收緩沖區大小
m_Serial.SetInBufferCount(0);
// 清空接收緩沖區
m_Serial.InputMode(1);
// 設置數據獲取方式
m_Serial.SetInputLen(0);
// 設置讀取方式
m_Opened=m_Serail.SetPortOpen(1);
// 打開指定的串口
return m_Opened;} 打開所需串口後,我們需要考慮串口通信的時機。在接收或發送數據過程中,可能需要監視並響應一些事件和錯誤,所以事件驅動是處理串列埠交互作用的一種非常有效的方法。使用OnComm事件和CommEvent屬性捕捉並檢查通信事件和錯誤的值。發生通信事件或錯誤時將觸發OnComm事件,CommEvent屬性的值將被改變,應用程序通過檢查CommEvent屬性值並作出相應的反應。 使用API函數 控制項雖然簡單易用,但由於必須拿到對話框中使用,在一些需要在線程中實現通信的應用場合下,控制項的使用顯得捉襟見肘。API是附帶在Windows內部的一個極其重要的組成部分。Windows的32位API主要是一系列很復雜的函數和消息集合。它可以看作是Windows系統為在其下運行的各種開發系統提供的開放式通用功能增強介面。 通信程序在CreateFile處指定串口設備及相關的操作屬性,再返回一個句柄,該句柄將被用於後續的通信操作,並貫穿整個通信過程。串口打開後,其屬性被設置為默認值,根據具體需要,通過調用GetCommState(hComm,&&dcb)讀取當前串口設備控制塊DCB設置,修改後通過SetCommState(hComm,&&dcb)將其寫入。運用ReadFile()與WriteFile()這兩個API函數實現串口讀寫操作,若為非同步通信方式,兩函數中最後一個參數為指向OVERLAPPED結構的非空指針,在讀寫函數返回值為FALSE的情況下,調用GetLastError()函數,返回值為ERROR_IO_PENDING,表明I/O操作懸掛,即操作轉入後台繼續執行。此時,可以用WaitForSingleObject()來等待結束信號並設置最長等待時間,舉例如下: BOOL bReadStatus;
bReadStatus = ReadFile( m_hIDComDev, buffer,
dwBytesRead, &&dwBytesRead, &&m_OverlappedRead );
if(!bReadStatus){
if(GetLastError()==ERROR_IO_PENDING){
WaitForSingleObject(m_OverlappedRead.hEvent,1000);
return ((int)dwBytesRead);}
return(0);}
return ((int)dwBytesRead); 多線程下實現串列通信
Windows內部的搶先調度程序在活動的線程之間分配CPU時間,Windows區分兩種不同類型的線程,一種是用戶界面線程(User Interface Thread),它包含消息循環或消息泵,用於處理接收到的消息;另一種是工作線程(Work Thread),它沒有消息循環,用於執行後台任務、監視串口事件的線程即為工作線程。 多線程程序的編寫在埠的配置,連接部分與單線程的相同,在埠配置完畢後,最重要的是根據實際情況,建立多線程之間的同步對象,如信號燈、臨界區和事件等。 一切就緒後即可啟動工作線程,程序如下: CWinThrea CommThread = AfxBegin
Thread(CommWatchThread, // 線程函數名
(LPVOID) m_pTTYInfo, // 傳遞的參數
THREAD_PRIORITY_ABOVE_NORMAL,
// 設置線程優先順序
(UINT) 0, // 最大堆棧大小
(DWORD) CREATE_SUSPENDED , // 創建標志
(LPSECURITY_ATTRIBUTES) NULL);
if(WaitCommEvent(pTTYInfo->idComDev,&&dwEvtMask,NULL))
{
if((dwEvtMask && pTTYInfo->dwEvtMask )== pTTYInfo->dwEvtMask)
{
WaitForSingleObject(pTTYInfo->hPostEvent,0xFFFFFFFF);
ResetEvent(pTTYInfo->hPostEvent);
// 置同步事件對象為非信號態
::PostMessage(CSampleView,ID_COM1_DATA,0,0); // 發送通知消息}}
BEGIN_MESSAGE_MAP(CSampleView, CView)
//{{AFX_MSG_MAP(CSampleView)
ON_MESSAGE(ID_COM1_DATA, OnProcessCom1Data)
ON_MESSAGE(ID_COM2_DATA, OnProcessCom2Data)
.....
//}}AFX_MSG_MAP
END_MESSAGE_MAP() 多線程的實現可以使得各埠獨立,准確地實現串列通信,使串列通信具有更廣泛的靈活性與嚴格性,且充分利用CPU時間。但在具體的實時監控系統中如何協調多個線程、線程之間以何種方式實現同步,這是多線程串列通信程序實現的難點。 串列通信的操作方式

8、cms系統內存滿了怎麼刪除

1

9、織夢CMS安裝時,為什麼總是出現資料庫存內存不足呢

你可以看一下你的空間究竟有多大。
方法:
織夢後台——核心——文件式管理器——空間檢查

與cms內存收集相關的知識