2013-04-05 5 views
9

कोई मुझे बता सकते क्यों निम्नलिखित बातें भी हो सकता है:अजीब धीमा

2 कंप्यूटर:

  1. मेरे कार्य कंप्यूटर अनुप्रयोग
  2. सर्वर

मैं बनाए रखने के सी ++ प्रोग्राम (एमएसवीसी 2005 सी ++ संकलित) जो सर्वर पर बहुत धीमा काम करता है, लेकिन मेरे कंप पर नहीं।

मैंने माप (GetThreadTimes और इतने पर) आयोजित किया और निश्चित रूप से कह सकता है कि संकीर्ण स्थान - इसकी स्मृति आवंटन (नया/malloc)। और यह केवल सर्वर पर होता है!

मैं दावा कर सकता है कि यह स्मृति विखंडन के कारण कार्यक्रम की वजह से 1 समय सर्वर उदाहरण होता है ठीक काम करता है, उसके शुरू होने allocs पर समय खो डेटा स्मृति (1-1.5 लाख allocs/मुक्त करता है) में फिर से फिर से लोड करने के बाद ही।

मैं अगर मैं स्मृति दोनों कंप्यूटर (अपने कंप्यूटर अनुप्रयोग और सर्वर) लेकिन क्या मैं देख रहा हूँ है पर विखंडन के कारण एक ही व्यवहार देख तो आश्चर्य नहीं होगा: 1)। मेरे कंप आवंटन पर ~ 5% समय लगता है (सटीक नहीं लेकिन उस तरह कुछ) 2)। सर्वर पर इन आवंटकों में ~ 75% समय

यह कैसे हो सकता है? सर्वर कंप्यूटर पर C++ आवंटन को धीमा कर सकता है, इस बीच यह मेरे वर्कस्टेशन के लिए ठीक है। अंतर कहाँ हो सकता है? शायद यह ओएस-स्तरीय मेमोरी प्रबंधन कार्यों से जुड़ा हुआ कुछ है? क्योंकि सी ++ स्तर प्रबंधक दोनों मामलों में समान है।

यहां दोनों कॉन्फ़िगरेशन हैं:

1)। मेरा कंप्यूटर (जहां ऑलॉक्स ~ 5% लेते हैं):

OS Name:     Microsoft Windows 7 Enterprise 
OS Version:    6.1.7600 N/A Build 7600 
OS Manufacturer:   Microsoft Corporation 
OS Configuration:   Member Workstation 
OS Build Type:    Multiprocessor Free 
Registered Owner:   Windows User 
Original Install Date:  16/09/2011, 19:37:43 
System Boot Time:   05/04/2013, 11:58:11 
System Model:    7304A58 
System Type:    x64-based PC 
Processor(s):    1 Processor(s) Installed. 
          [01]: Intel64 Family 6 Model 23 Stepping 10 GenuineIntel ~2642 Mhz 
Windows Directory:   C:\Windows 
System Directory:   C:\Windows\system32 
Boot Device:    \Device\HarddiskVolume2 
System Locale:    ru;Russian 
Input Locale:    en-us;English (United States) 
Total Physical Memory:  4,061 MB 
Available Physical Memory: 872 MB 
Virtual Memory: Max Size: 8,121 MB 
Virtual Memory: Available: 4,579 MB 
Virtual Memory: In Use: 3,542 MB 
Page File Location(s):  C:\pagefile.sys 

2)। सर्वर (जहां ऑलॉक्स ~ 75% लेते हैं):

OS Name:     Microsoft(R) Windows(R) Server 2003, Enterprise Edition 
OS Version:    5.2.3790 Service Pack 2 Build 3790 
OS Manufacturer:   Microsoft Corporation 
OS Configuration:   Member Server 
OS Build Type:    Multiprocessor Free 
Original Install Date:  11/12/2008, 01:22:57 
System Up Time:   1 Days, 8 Hours, 35 Minutes, 52 Seconds 
System Manufacturer:  HP 
System Model:    ProLiant BL685c G5 
System Type:    X86-based PC 
Processor(s):    4 Processor(s) Installed. 
          [01]: x86 Family 16 Model 2 Stepping 3 AuthenticAMD ~2210 Mhz 
          [02]: x86 Family 16 Model 2 Stepping 3 AuthenticAMD ~2210 Mhz 
          [03]: x86 Family 16 Model 2 Stepping 3 AuthenticAMD ~2210 Mhz 
          [04]: x86 Family 16 Model 2 Stepping 3 AuthenticAMD ~2210 Mhz 
Windows Directory:   C:\WINNT 
System Directory:   C:\WINNT\system32 
Boot Device:    \Device\HarddiskVolume1 
Total Physical Memory:  65,534 MB 
Available Physical Memory: 61,284 MB 
Page File: Max Size:  97,696 MB 
Page File: Available:  93,445 MB 
Page File: In Use:   4,251 MB 
Page File Location(s):  C:\pagefile.sys 
          D:\pagefile1\pagefile.sys 
          D:\pagefile2\pagefile.sys 
          D:\pagefile3\pagefile.sys 
          D:\pagefile4\pagefile.sys 
          D:\pagefile5\pagefile.sys 
          D:\pagefile6\pagefile.sys 
          D:\pagefile7\pagefile.sys 

इस समस्या को स्पष्ट करने के लिए आभारी होंगे।

+0

क्या आप दोनों मशीनों पर एक ही डेटासेट का उपयोग कर रहे हैं? – nneonneo

+0

नहीं, लेकिन तुलनीय। मेरे कंप में ~ 260 000 आइटम काम पर धीरे-धीरे काम करते हैं, सर्वर कंप ~ 350 000 पर कठिनाइयों का सामना कर रहा है और अधिक आइटम लोड 1 100 000 वस्तुओं के दौरान भी कड़ी मेहनत करना शुरू कर देता है। –

उत्तर

4

समस्या यह हो सकती है कि स्मृति कार्य आवंटन और मुक्त करने के लिए स्मृति को लॉक करने के लिए केवल एक म्यूटेक्स का उपयोग करें।

+2

एमएसवीसी ++ 2005 बिल्कुल नवीनतम संस्करण नहीं है, न ही सर्वर 2003 है। विंडोज 7 मशीन में डिफ़ॉल्ट रूप से कम फ्रैगमेंटेशन हीप सक्षम है। इसलिए यह काफी विश्वसनीय जवाब है। मैं उम्मीद करता हूं कि नए संस्करण 4x4 कोर मशीनों के साथ बेहतर काम करेंगे। एक कामकाज के रूप में, एक अन्य आवंटक की कोशिश करें जैसे उदा। [जेमलोक] (http://www.canonware.com/jemalloc) – MSalters

+3

दिलचस्प। और इस धागे से उद्धरण (http://stackoverflow.com/questions/4859263/can-multithreading-speed-up-memory-allocation)- "... कम-विखंडन ढेर सक्षम होने पर ओएस हीप फ़ंक्शन बेहतर प्रदर्शन करेंगे , जो डिफ़ॉल्ट रूप से विंडोज विस्टा के बाद से है (विंडोज एक्सपी पर इसे हेपसेट इंफॉर्मेशन()) को एक साधारण कॉल के साथ एप्लिकेशन द्वारा सक्षम किया जा सकता है।और एलएफएच सक्षम होने के साथ, विंडोज ढेर का प्रदर्शन सबसे तेज़ उपलब्ध अन्य आवंटकों के लिए तुलनीय है " – SChepurin

+0

धन्यवाद, जेमलोक पर विचार करेगा, शायद यह मदद करेगा, लेकिन यह सुनिश्चित नहीं है कि यह मेरे मुख्य द्वारा स्वीकार किया जाएगा :) –