प्रश्न: मेरे पास एक विंडोज़ सेवा है जो बहुत सी बाल प्रक्रियाओं को जन्म देती है। ऐसा लगता है कि लगभग 100 सीमाएं हैं, जहां प्रक्रिया शुरू नहीं की जा सकती है। CreateProcess() कॉल एक पिड के साथ वापस आता है, लेकिन फिर प्रक्रिया बस भौतिक बनाने में विफल रहता है। अगर मैं इसके सर्वर को कंसोल एप्लिकेशन के रूप में चलाता हूं, तो यह सीमा दूर हो जाती है। साथ ही, अगर मैं DETACHED_PROCESS ध्वज सेट करता हूं, तो यह सीमा युगल से अधिक है। हालांकि, अगर मैं DETACHED_PROCESS सेट करता हूं और CreateProcesssWithLogonW() को कॉल करता हूं तो मुझे विफलता मिलती है।विंडोज़ सेवा द्वारा उत्पन्न की जा सकने वाली अधिकतम बाल प्रक्रियाओं को कैसे बढ़ाया जा सकता है - डेस्कटॉप ढेर सीमा
उत्तर
यह एक "डेस्कटॉप ढेर" समस्या है। एक बहुत अच्छी चर्चा यहां पाया जा सकता:
ध्यान दें कि यह केवल, सेवाओं के रूप में चला रहे कार्यक्रमों पर लागू होता है क्योंकि सेवाओं के लिए डिफ़ॉल्ट डेस्कटॉप ढेर आकार इतना है कि अनुप्रयोगों के लिए की तुलना में छोटा होता है।
हमारे मामले में, हम परिवर्तन के बिना संसाधनों से बाहर होने से पहले लगभग 100 बाल प्रक्रियाएं लॉन्च करने में सक्षम थे। परिवर्तन के साथ, इस संख्या में काफी वृद्धि हो सकती है।
इस उत्तर हम अपने नॉलेजबेस पर अपने अंतिम उपयोगकर्ताओं के लिए दिया गया है:
चेतावनी: इस सभी सेवाओं के डेस्कटॉप ढेर को प्रभावित करता है! इसे आवश्यक से बड़ा न बनाएं या आप सिस्टम को अधिक संसाधनों का उपभोग करने के लिए प्रेरित करेंगे और आप कुल उपलब्ध डेस्कटॉप ढेर आकार में समस्याओं के खिलाफ टक्कर मार सकते हैं।
यदि आपको लगता है कि आप लगभग 100 कुल परियोजनाओं को खोल नहीं सकते हैं, यहां तक कि एक बहुत बड़े RAM सर्वर पर भी, तो आप विंडोज़ "डेस्कटॉप हीप आकार" की सीमा में भाग ले सकते हैं।
समस्या यह है कि विंडोज़ के तहत सेवा सत्र (जहां सेवाएं चलती हैं) में विंडोज़ बनाने के लिए इस "डेस्कटॉप ढेर" स्थान से कम है।
लघु संस्करण है:
सेवाएं इंटरैक्टिव सत्र की तुलना में छोटे डेस्कटॉप ढेर मिलता है।
डेस्कटॉप ढेर आकार खिड़कियों
की संख्या को सीमित प्रत्येक उप-सर्वर एक या अधिक "खिड़कियों" बनाता है भले ही हम उन्हें देख नहीं सकते।
समाधान:
बैकअप कोई भी बदलाव करने से पहले अपने रजिस्ट्री!
रन regedit।
%SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,20480,768 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2 ServerDll=sxssrv,4 ProfileControl=Off MaxRequestThreads=16
महत्वपूर्ण बिट है:
SharedSection=1024,20480,768
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows
आप इस तरह की स्ट्रिंग देखेंगे: व्यवस्थापक
संपादित करें रजिस्ट्री मान के रूप में exe दूसरा एनयू एमबर (20480) इंटरैक्टिव सत्रों का आकार है। तीसरा नंबर (768) गैर-इंटरैक्टिव (सेवाओं) सत्रों का आकार है। ध्यान दें कि तीसरा नंबर दूसरे की तुलना में 26x छोटा है। प्रयोगात्मक रूप से, हमने पाया है कि यह बदल रहा है:
SharedSection=1024,20480,2048
270 करने के लिए 106 से परियोजना की सीमा में वृद्धि, लगभग पूरी तरह से ढेर आकार के साथ स्केलिंग। एक ऐसा मूल्य चुनें जो सिस्टम पर सभी उपयोगकर्ताओं द्वारा एक साथ खोले जाने वाले परियोजनाओं की अधिकतम संख्या को दर्शाता है। इस मान को आवश्यक से बड़ा न बनाएं, और 8192 से बड़ा न हो, क्योंकि आपके सिस्टम में प्रत्येक सेवा एक बहुमूल्य संसाधन का उपभोग करेगी।
आपको इन नई सेटिंग्स को प्रभावी होने के लिए रीबूट करने की आवश्यकता होगी।
हमारे पास कई रिमोट डेस्कटॉप सर्वर थे जिन्हें हमें परीक्षण करने के लिए आवश्यक था, इसलिए हमने अपने आरडी सर्वर के लिए एडी पूछने के लिए एक पावरहेल स्क्रिप्ट लिखी और फिर इस रजिस्ट्री परिवर्तन को लागू किया। आनंद लें
$newValue = "%SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,20480,2048 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=sxssrv,4 ProfileControl=Off MaxRequestThreads=16"
$origValue = "%SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,20480,768 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=sxssrv,4 ProfileControl=Off MaxRequestThreads=16"
if ($update) {
Clear-Variable update
}
$updateConfirm= [System.Windows.Forms.MessageBox]::Show("Update Desktop Heap Limitation to 2048?" , "Status" , 4)
if ($updateConfirm -eq "YES") {
$update = $true
} else {
$revertConfirm= [System.Windows.Forms.MessageBox]::Show("Revert Desktop Heap Limitation to 768?" , "Status" , 4)
if ($revertConfirm -eq "YES") {
$update = $false
}
}
if (($updateConfirm -ne "YES") -and ($revertConfirm -ne "YES")) {
Write-Host "User did not specify whether to update or revert Desktop Heap Limitation. Exiting Setup."
Read-Host "Press Enter to exit."
break
}
#Import Active Directory PowerShell module
if (Test-Path C:\Users\${env:USERNAME}\Documents\WindowsPowerShell\Modules\ActiveDirectory\ActiveDirectory.psm1) {
Import-Module ActiveDirectory -prefix AD
} else {
$s = New-PSSession -computerName DC01WDC01
Invoke-command { import-module ActiveDirectory } -session $s
Export-PSSession -session $s -commandname *-AD* -outputmodule ActiveDirectory -allowclobber
Import-Module ActiveDirectory -prefix AD
Remove-PSSession -session $s
}
$servers = Get-ADADComputer -Filter {(Name -Like "RDS*")} | Select -Expand Name
foreach ($server in $servers) {
Write-Host "Working on $server" -ForegroundColor Magenta
if(!(Test-Connection -ComputerName $server -Count 1 -quiet)) {
Write-Warning "$server : Offline"
Continue
}
if ($update -eq $true) {
Invoke-Command -ComputerName $server -ArgumentList $newValue -ScriptBlock {
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems" -Name "Windows" -Value $args[0]
$result = Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems" | SELECT Windows
if ($result.Windows -like "*SharedSection=1024,20480,2048*") {
Write-Host "Successfully reverted Desktop Heap Limit to 2048" -ForegroundColor Green
} else {
Write-Warning "Update to registry value unsuccessful on $env:ComputerName"
}
}
} elseif ($update -eq $false) {
Invoke-Command -ComputerName $server -ArgumentList $origValue -ScriptBlock {
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems" -Name "Windows" -Value $args[0]
$result = Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems" | SELECT Windows
if ($result.Windows -like "*SharedSection=1024,20480,768*") {
Write-Host "Successfully reverted Desktop Heap Limit to 768" -ForegroundColor Green
} else {
Write-Warning "Update to registry value unsuccessful on $env:ComputerName"
}
}
}
}
दुर्भाग्य से सेटिंग हमारी स्थिति में हमारे लिए काम नहीं करती है, लेकिन हो सकता है कि लिपि किसी अन्य समूह की जांच करने के लिए मशीनों के बड़े समूह के साथ मदद करे। :) – Shaun
मेरे लिए काम किया, लेकिन इसे प्रभावी होने के लिए बदलाव करने के बाद रीबूट करना पड़ा। – user3725395
- 1. दीवारों पर ईंटों की व्यवस्था की जा सकने वाली तरीकों की कुल संख्या क्या है?
- 2. छोड़े जा सकने वाले अपवाद
- 3. विजुअल स्टूडियो को WinDBG जैसी बाल प्रक्रियाओं को डीबग करने के लिए बनाया जा सकता है?
- 4. जावा में बंद होने से इंटरफेस को कैसे बदला जा सकता है/बढ़ाया जा रहा है?
- 5. बाल प्रक्रियाओं की संख्या
- 6. विंडोज़ में पोते की प्रक्रियाओं की प्रतीक्षा
- 7. क्या एमकेमैपव्यू द्वारा उपयोग की जाने वाली मेमोरी कुछ कैसे जारी की जा सकती है?
- 8. बूटस्ट्रैप - खिड़की की ऊंचाई फिट करने के लिए छवि को कैसे बढ़ाया जा सकता है?
- 9. बाल प्रक्रियाओं को कैसे बढ़ाया जाए जो माता-पिता के साथ मर नहीं जाते?
- 10. आईआईएस 7 का अधिकतम डिफ़ॉल्ट POST अनुरोध आकार - 64kB/65kB सीमा को कैसे बढ़ाया जाए?
- 11. LINQPad में ग्राफ़ की सीमा को कैसे बढ़ाया जाए?
- 12. पावरहेल में बनाई जा सकने वाली सभी COM ऑब्जेक्ट्स कहां मिल सकती हैं?
- 13. सीमा को हटाया नहीं जा सकता है। Microsoft.Office.Interop.Word.Range.set_Text (स्ट्रिंग प्रोप)
- 14. ऐप इंजन ब्लॉबस्टोर - उपयोगकर्ता द्वारा अपलोड की जा सकने वाली फ़ाइल के आकार को सीमित करने के लिए मैं क्या कर सकता हूं?
- 15. 2 द्वारा पुनरावर्तक को कैसे बढ़ाया जाए?
- 16. पर्यवेक्षक प्रक्रियाओं की निगरानी कैसे करता है? क्या यह JVM पर भी किया जा सकता है?
- 17. एक क्वेरी में मोंगोडीबी '$ इन' ऑपरेटर को पारित किए जा सकने वाले सरणी तत्वों की संख्या पर सीमा क्या है?
- 18. क्या @PropertySources को स्प्रिंग प्रोफाइल द्वारा चुना जा सकता है?
- 19. क्या मार्करों की संख्या की कोई सीमा है जिसे Google स्थिर मानचित्रों पर रखा जा सकता है?
- 20. कैबल इंस्टॉल द्वारा उपयोग की जाने वाली सीमा सीमित करें?
- 21. क्या एक ही डीएलएल डेटा 2 अलग-अलग प्रक्रियाओं द्वारा साझा किया जा सकता है?
- 22. आर के लिए आईडीईई के रूप में नोटपैड ++ कैसे बढ़ाया जा सकता है?
- 23. AirPlay `DNSServiceRegister` द्वारा पंजीकृत सेवा आईओएस द्वारा की खोज नहीं की जा सकती 11
- 24. आईआईएस 7.5 के साथ किसी फॉर्म में पोस्ट किए जा सकने वाले फ़ील्ड की मात्रा को कैसे बदला जाए?
- 25. Django टेम्पलेट: क्यों शामिल टेम्पलेट में ब्लॉक बाल टेम्पलेट द्वारा ओवरराइट नहीं किया जा सकता है?
- 26. एंड्रॉइड एप्लिकेशन के ढेर आकार को कैसे बढ़ाया जाए?
- 27. कार्यक्रम बढ़ाया JPanel वर्ग की विधि paintComponent() पर न जा
- 28. अलर्ट संवाद में सूचीदृश्य वाले लेआउट को कैसे बढ़ाया जा सकता है?
- 29. कच्चे H264 से FLV स्ट्रीम कैसे उत्पन्न करें जिसे एक्शनस्क्रिप्ट नेटस्ट्रीम द्वारा खेला जा सकता है?
- 30. एक ggplot2 scatterplot पर डेटा एलीपसे को कैसे बढ़ाया जा सकता है?
मैं इन सभी 'डेस्कटॉप ढेर' लेखन में भाषा को समझ नहीं पा रहा हूं जो कि सेवाओं को फोर्किंग पर लागू होते हैं, लेकिन इस उत्तर ने हमारे छिपे को बचाया। – covener
अविश्वसनीय रूप से पर्याप्त, विंडोज 2008 सर्वर वेब संस्करण (Vista कोर), विंडोज 2008 सर्वर आर 2 (विंडोज 7 कोर), और विंडोज 2012 सर्वर आर 2 (विंडोज 8.1 कोर) पर एक ही सीमाएं लगाई गई थीं। मैंने अपना बदलकर 1024,20480,40 9 6 कर दिया और इन सभी सर्वरों पर 16 से 32 तक अधिकतम थ्रेड को संसाधन उपयोग पर कोई बुरा प्रभाव नहीं पड़ा, लेकिन उन प्रक्रियाओं पर चल रही सेवाओं में एक बढ़ी हुई क्षमता, साथ ही साथ अन्य प्रक्रियाओं को सफलतापूर्वक विकसित करने के लिए। धन्यवाद! बहुत स्पष्ट विवरण और कामकाज के लिए –
+1। रिकॉर्ड के लिए, हालांकि, यदि आप किसी सेवा में कई बच्चे प्रक्रियाएं बना रहे हैं, तो आप इसे गलत कर रहे हैं। :-) [अनुमोदित, यदि आप यूनिक्स से कोड पोर्ट कर रहे हैं तो यह फिर से आर्किटेक्ट करने के प्रयास के लायक नहीं हो सकता है।] –