2015-11-02 49 views
2

我有一個服務器構建與TIdHTTPServer上XE6(默認印10安裝和默認的組件設置選項)的文件下載:Delhpi TIdHTTPServer逐漸增加內存

procedure CommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo); 
begin 
    AResponseInfo.ContentStream := TFileStream.Create('C:\MyFile.Exe', fmOpenRead or fmShareDenyNone); 
end; 

多月後(6個月)和很多請求(少於或多於1'000'000),服務器進程增加超過50 MB的私有內存(在任務管理器上)。

TIdHTTPServer是否泄漏內存?

更新

在一個小的測試應用程序

initialization 
    ReportMemoryLeaksOnShutdown := True; 

無泄漏是trown

我也曾嘗試使用FastMM DLL,這是報告(我的SO是意大利語)

-------------------------------- 2015/11/2 1 4:52:38 -------------------------

Leak di un blocco。拉DIMENSIONE E:20

Questo bloccoèstato allocato DAL螺紋0x730,E LO棧跟蹤 (indirizzo restituito)在QUEL時代報時代:40678A 4087AF 408ED6 [IdThreadSafe] [IdThreadSafe] [IdThreadSafe..TIdThreadSafeObjectList] [144] 6C996F [IdGlobalProtocols.pas] [IdGlobalProtocols] [IdGlobalProtocols.IdGlobalProtocols] [4743] 6C9984 [IdGlobalProtocols.pas] [IdGlobalProtocols] [IdGlobalProtocols.IdGlobalProtocols] [4744] 6C99D5 [IdThread.pas] [IdThread ] [IdThread.IdThread] [732] 409F80 409FEC 40F4B7 [SysInit.pas] [SysInit] [SysInit。@ InitExe] [1191] 6CA144 [WMain.p作爲] [WMain] [WMain.WMain] [295] 75C6337A [BaseThreadInitThunk] 77AF9882 [未知在RtlInitializeExceptionChain功能] 77AF9855 [在RtlInitializeExceptionChain未知功能]

伊爾bloccoèattualmente崛起對噠烏納istanza德拉CLASSE: TIdThreadSafeInteger

伊爾NUMERO二allocazione E:475

轉儲德拉MEMORIA二256字節partendo dall'indirizzo德爾puntatore 7EF3D2C0:FC 02 64 00 60 0F FA 7E 00 00 00 00 00 00 00 00 0B 12 17 7A 80 80 80 80 00 00 00 00 B1 D5 F3 7E 00 00 0 0 00 00 00 00 00 00 00 00 00 00 00 00 00 E2 01 00 00 8A 67 40 00 AF 87 40 00 D6 8E 40 00 A4 88 40 00 8D 85 D2 00 BA 85 D2 00 15 FC 4C 00 9E FB 4C 00 05 43 4B 00 ED 91 66 00 5D 9A 6C 00 80 9F 40 00 EC 9F 40 00 B7 F4 40 00 44 A1 6C 00 7A 33 C6 75 82 98 AF 77 55 98 AF 77 00 00 00 00 00 00 00 00 00 00 00 00 30 07 00 00 30 07 00 00 A6 67 40 00 CD 87 40 00 21 8F 40 00 C6 88 40 00 D3 88 40 00 38 FD 4C 00 D3 88 40 00 62 43 4B 00 D3 88 40 00 3E 92 66 00 14 9F 40 00 14 A3 40 00 87 A1 6C 00 7A 33 C6 75 82 98 AF 77 55 98 AF 77 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 BC 69 4E 00 45 BC CB 52 A0 41 D3 00 80 80 80 80 BA 43 34 AD 80 80 80 80ü。 d。 `。 ú〜。 。 。 。 。 。 。 。 。 。 ž。 €€€€。 。 。 。 ±○○〜。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。埃。 。 。期基於g @。 ¯‡@。 O Z爲@。 ¤@ 。 ... O。 º... O。 。 üL. žûL. 。 ÇK.我 F。 ] S升。 €Ÿ@。 ŸI @。 ·盒@。 d¡湖Z 3 ÆU〜U〜¯¯瓦特瓦特。 。 。 。 。 。 。 。 。 。 。 0。 。 。 0。 。 。 | G @。 ͇@。 ! @。 Æ@。 Ó @。 8條L. Ø@。 B C K. Ø@。 >「F. 。 Ÿ @。 。 £@。 ¡‡湖Z 3ÆU〜U〜¯¯瓦特瓦特。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 ¼我 N. ˼ËÓ[R A. €€€€€€ºC 4€€

--------------------------------十一分之二千零一十五/ 2 14時52分38秒------------------------- 二未blocco泄漏。 ÈLA DIMENSIONE:36

questoèstato allocato DAL blocco螺紋0x730,E LO棧跟蹤 (indirizzo restituito)QUEL時代報印刷時代:40678A 440 106 4087AF 408ED6 [System.SyncObjs.pas] [系統] [系統.SyncObjs.TEvent.Create] [827] 412FEA [Winapi.Windows.pas] [WinAPI的] [Winapi.Windows.GetProcAddress] [34 295] 6C98AB [IdStack.pas] [IdStack] [IdStack.IdStack] [1138 ] 409F80 409FEC 40F4B7 [SysInit.pas] [SYSINIT] [SYSINIT。@ InitExe] [1191] 6CA144 [WMain.pas] [WMain] [WMain.WMain] [295] 75C6337A [BaseThreadInitThunk] 77AF9882 [未知功能處RtlInitializeExceptionChain] 77AF9855[在RtlInitializeExceptionChain未知功能]

attualmente崛起對èIL blocco德拉CLASSE噠UNA istanza: TIdCriticalSection

èIL NUMERO二allocazione:458個

德拉MEMORIA二256個字節轉儲dall'indirizzo德爾partendo puntatore 7EFA0A60:90 D7 60 00 C0 9B 8A 00 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 16 CC A7 B0 80 80 80 80 00 00 00 00 FA 0B 91 7E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 8A D1 01 67 40 00 40 00 A3 A4 D4 A6 40 00 D1 E3 40 00 0E B4 AF 77 B5 33 AF 77 E3 2F AF 77 FA FA AD 77 2B D7 C6 75 48 D7 C6 75 BA D6 C6 75 7E D6 C6 75 91 D6 C6 75 32 FA AD 77圖1A D6 C6 75 04 D4 C6 75 FE D5 C6 75 34 47 B1 77 A1 47 B1 77 09 F2 AE 77 74 F2 AE 77 30 07 00 00 30 07 00 00 A6 67 40 00 5D A5 40 00 41 A1 40 00 4B B4 62 00 14 9F 40 00 14 A3 40 00 87 A1 6C 00 7A 33 C6 75 82 98 AF 77 55 98 AF 77 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 22 00 00 00 B0 04 02 00 70 93 97 CA×`。 A>秒。是是是是。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 ̧°€€€€。 。 。 。 」。 U〜。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 ñ。 。 。期基於g @。 £¤@。 Ø| @。 N A @。 。 '¯¯W Wμ3 A/U U‾ w + w×H×ÆÆüüüº〜ÖÖÆÆ 的u' ÆÖúW U 2。 ÖÆü。 ÆÆ○○þU U 4 G G±¡ ±瓦特瓦特○○®®瓦特噸W 0。 。 。 0。 。 。 | G @。 ]¥@。一¡@。 K「灣。 Ÿ@。 。 £@。 ¡‡升 。 Z 3ÆU〜U〜¯¯瓦特瓦特。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 「... ...°P」 - 伊薩

-------------------------------- 2015/11/2 14時52分38秒------------------------- 迪未blocco泄漏。尺寸是:36

該塊是從0x730線程分配的,並且在該時間棧跟蹤 (返回地址)是:40678A 4087AF 408ED6 [System.SyncObjs.pas] [系統] [系統.SyncObjs.TEvent.Create] [827] 4087B8 6409AF [IdThreadSafe] [IdThreadSafe] [IdThreadSafe..TIdThreadSafeObjectList] [144] 6C99D5 [IdThread.pas] [IdThread] [IdThread.IdThread] [732] 409F80 409FEC 40F4B7 [SysInit.pas] [SYSINIT] [SYSINIT。@ InitExe] [1191] 6CA144 [WMain.pas] [wmain] [WMain.WMain] [295] 75C6337A [BaseThreadInitThunk] 77AF9882 [未知在RtlInitializeExceptionChain功能] 77AF9855 [在RtlInitializeExceptionChain未知功能]

該塊當前使用的類的一個實例:TIdCriticalSection

分配的數量是:476

256個字節轉儲存儲器從地址開始指針 7EFA0F60:90 D7 60 00 E8 9B 8A 00 FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 76 7F C8 17 80 80 80 80 00 00 00 00 FA 91 10 7E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 DF 01 00 00 67 8A 4 0 00 A3 A4 40 00 30 A9 40 00 26 6D 4B 00 81 68 4B 00 12 3B 66 00 2D 9A 6C 00 80 9F 40 00 EC 9F 40 00 B7 F4 40 00 44 A1 6C 00 7A 33 C6 75 82 98 AF 77 55 98 AF 77 00 00 00 00 00 00 00 00 00 00 00 00 00 5D A5 40 00 95 BA 40 00 DD B9 40 00 DD BA 40 00 45 C8 40 00 E9 C4 40 00 25 C5 40 00 FA C6 40 00 9B 6E 4B 00 B6 67 4B 00 D3 88 40 00 7A 40 66 00 14 9F 40 00 14 A3 A1 40 00 87 6C 00 33 7A 75 82 C6 98 77 55 98 AF AF 77 00 00 00 00 00 00 00 00 00 00 00 00 18 00 00 00 B0 04 02 00 29 94 50 D2×`。是>秒。是是是是。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 v您。 €€€€。 。 。 。 」。 U〜。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 SS。 。 。 Š@克£¤@。 ©@ 0。 &米K.^h K. 。 ; F。 - 。S L。 €Ÿ@。 ŸI @。 ·Ô@。 d¡湖Z 3 ÆU,〜¯¯〜W U瓦特。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 0。 。 。 0。 。 。 ]¥@ 。 •º@。 ݹ@。 ݺ@。這是@。這是一個@。 %@ 埃。 ú@℃。 >ÑK. ¶克K. Ó@。 ž@ F。 。 Ÿ @。 。 £@。 ‡¡湖3ÆžU,〜¯¯〜W U瓦特。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 °。 。 。 )「O P

+1

爲什麼在這裏問?你可以發現這一點你自己。做一個小TestApplication並設置[ReportMemoryLeaksOnShutdown(HTTP://docwiki.embarcadero。com/Libraries/XE6/zh/System.ReportMemoryLeaksOnShutdown)爲true ... – whosrdaddy

+0

@whosrdaddy我已更新問題 – ar099968

+1

您是使用XE6內置Indy服務器,還是使用svn trunk的最新可用代碼? – whosrdaddy

回答

1

這不是異常長時間運行的進程具有經過一番磨合時間比該內存足跡不久後啓動大的內存佔用。即使在過程中暫時處理請求。由於內存分配需要一定的時間,有些經理內存(我認爲FastMM這是否也一樣)將保持即不再沿用至今分配的內存,以備當軟件需要指定新的對象或變量,這樣能在內存是重新使用。

在你的情況,如果可能的話,讓過程運行另一個幾個月,看看閹了內存使用穩定,不再繼續增長。如果它是重要的這個內存應該可再用於其它流程,請檢查您是否可以選擇或配置設置調整FastMM。