2012-09-14 16 views
12

को लक्षित करना आप एक विशिष्ट CPU कोर को लक्षित करने, नोड प्रक्रिया कैसे शुरू करते हैं?Node.js - एक सीपीयू कोर

मैंने नोड क्लस्टर देखा है, लेकिन मुझे अलग-अलग कोरों पर दो अलग-अलग प्रक्रियाओं को शुरू करने में दिलचस्पी है।

मैं यह सोचते गया था यह कर जब कमांड लाइन से नोड शुरू करने, यानी करने का एक तरीका था:

नोड myapp.js

मुझे कोई दिलचस्पी होगी कैसे करना है पता करने के लिए यदि कोई अंतर है तो यह विंडोज और लिनक्स दोनों में है।

+0

आप ऐसा कर सकते हैं: https://github.com/Unitech/pm2 – Unitech

+1

@Unitech कुछ कोड के साथ एक जवाब जोड़ने सकते हैं? आप एक विशिष्ट सीपीयू कोर कैसे लक्षित करते हैं? – styfle

उत्तर

5

लिनक्स पर आप taskset का उपयोग किसी दिए गए CPU एफ़िनिटी के साथ नोड चलाने के लिए कर सकते हैं। ऐसा करने के लिए विंडोज़ में start कमांड का उपयोग करने के बारे में जानकारी के लिए this post देखें।

11

सामान्य रूप से, शेड्यूलर बिना किसी सहायता के इस का एक अच्छा काम करेगा। जंगली में, मैंने केवल एक परिस्थिति देखी है जहां यह mattered ....

हम 8-कोर बॉक्स पर एक नोड सेवा तैनात कर रहे थे और लोड परीक्षण के दौरान हमने अजीब अवलोकन किया ... वास्तव में सेवा 8 कर्मचारियों की तुलना में 7 कर्मचारियों के साथ बेहतर। बाद में डीबगिंग का थोड़ा सा और हमने पाया कि सभी नेटवर्क इंटरप्ट को कोर 0 द्वारा संभाला जा रहा था। मैंने 15 श्रमिकों का उपयोग करने के साथ खेला ताकि कोर 0 की तुलना में भार का 1/2 हिस्सा होगा अन्य कोर आखिरकार, मुझे लगता है कि हम 7 श्रमिकों के साथ जा रहे हैं क्योंकि यह आसान और अधिक अनुमानित था और जटिलता ~ 7% अधिक सैद्धांतिक थ्रूपुट प्राप्त करने के लिए बस इसके लायक नहीं थी।

कहा जा रहा है, लिनक्स पर सीपीयू आत्मीयता स्थापित करने के लिए:

$ taskset -pc 3089 
pid 3089's current affinity list: 0,1 

$ taskset -p 3089 
pid 3089's current affinity mask: 3 # core 0 = 0x1, core 1 = 0x2 


$ taskset -pc 1,2,3 3089 
pid 3089's current affinity list: 0,1 
pid 3089's new affinity list: 1 
PM2 साथ
+0

सामान्य रूप से, शेड्यूलर बिना किसी सहायता के देखे बिना इसका बहुत अच्छा काम करेगा। मुझे लगता है कि मैं एफ़िनिटी मैन्युअल रूप से मजबूर करने पर भी सेट कर रहा था। क्या आप जानते हैं कि शेड्यूलर का व्यवहार किस प्रकार दस्तावेज किया गया है? जैसे यदि आप 4 कोर मशीन पर 4 नोड सेवाएं शुरू करते हैं, तो प्रत्येक को एक अलग कोर पर निष्पादित किया जाएगा, बस इसी तरह? – UpTheCreek

+0

ओएस संस्करण और लिनक्स के आधार पर वास्तव में कई कर्नेल शेड्यूलर हैं, आप विभिन्न विकल्पों के लिए ऑप्टिमाइज़ करने वाले कुछ विकल्पों में स्वैप कर सकते हैं। आम तौर पर, यदि आपके पास एन चीजें हैं जो दौड़ना चाहते हैं, और एन कोर हैं, तो शेड्यूलर का एक बहुत ही आसान काम है। यह मूर्खतापूर्ण नहीं है, लेकिन मुझे जो मिला है वह यह है कि यह परफ वर्क बनाने में आसान है क्योंकि यह कोर एफ़िनिटी के साथ मेरी गड़बड़ी को बेहतर बनाने के लिए है। यह समझने में सक्षम होने के लिए बहुत सावधानीपूर्वक प्रोफाइलिंग लेती है कि वास्तव में क्या चल रहा है और साबित करता है कि आपने सिस्टम में बाधा डालकर चीजों को बेहतर बना दिया है। –

+0

"यदि आप 4 कोर मशीन पर 4 नोड सेवाएं शुरू करते हैं, तो प्रत्येक को एक अलग कोर पर निष्पादित किया जाएगा?" - एक शब्द में, हाँ। और मज़ेदार है कि चीजों को गीक करना और मापना (वहां गया, ऐसा किया गया), आप सिस्टम को स्वचालित रूप से क्या करेंगे, इस पर अधिक बढ़ावा देने की संभावना नहीं है। जब तक आप टूटा हुआ कुछ ठीक करने की कोशिश करने से पहले मैं एक प्रदर्शनशील समस्या नहीं रखता तब तक मैं इंतजार करूंगा। इसके अलावा, यदि आप सेवा अनुरोध कर रहे हैं तो आपको इन बक्से को 100% लोड के करीब कहीं भी नहीं दबाया जाना चाहिए (कतार श्रमिक एक अलग कहानी हैं)। यहां तक ​​कि 50% भार वास्तव में आक्रामक है और इसके परिणामस्वरूप बहुत अधिक अतिरिक्त अनुरोध विलंबता होगी। –

संबंधित मुद्दे