নোড.জেএস "সর্বোচ্চ-পুরাতন-স্থান-আকার" প্রস্তাবিত


95

প্যারামিটারের উপর ভিত্তি করে নোড.জেএস কীভাবে কাজ করে তা বুঝতে আমার কিছুটা সমস্যা হচ্ছে max-old-space-size

আমার ক্ষেত্রে, উদাহরণস্বরূপ, আমি দুটি t2.smallএডাব্লুএস ইনস্ট্যান্স (2 জিবি র‌্যাম) চালাচ্ছি ।

নিশ্চিত না কেন, তবে আমি সেট max-old-space-size=4096(4 জিবি) করেছি। এই ক্ষেত্রে নোড কি করে? এই কনফিগারেশনটি কি কোনও সম্ভাব্য মেমরি বরাদ্দের ব্যর্থতা হতে পারে?

আমি কীভাবে max-old-space-sizeসার্ভার সংস্থানগুলির উপর নির্ভর করে সঠিক মান নির্ধারণ করব ?

আমার অ্যাপ্লিকেশনটি ক্রমাগত মেমরির ব্যবহার বাড়ছে এবং আমি নোড ইন্টার্নাল সম্পর্কে সমস্ত কিছু বোঝার চেষ্টা করছি।


8
আমি এখন একটি মন্তব্য যুক্ত করছি যে আমি দেখতে পাচ্ছি যে এটি দেখতে অনেকটা শান্ত। আমার নোডেজেএস অ্যাপ্লিকেশনটির কোনও মেমরি ফাঁস হয়নি তা বুঝতে পুরো এক সপ্তাহ সময় লেগেছিল তবে আবর্জনা সংগ্রহকারী কখনই লাথি দেয় না t অ্যাক্সেসযোগ্য র‌্যামের কারণে সার্ভার ক্রাশ হতে চলেছে।
বোরজান্ট

আবর্জনা সংগ্রহকারীকে লাথি মারার কোনও উপায় ছিল?
ZG101

@ বোরজান্তে আবর্জনা সংগ্রহকারী চলছিল না কেন?
ঐশ্বরিক

4
কনফিগার করা সর্বোচ্চ-পুরাতন-স্থান-আকারের মেশিনের মোট র্যামের পরিমাণের চেয়ে উচ্চতর সীমা ছিল।
বোরজান্তে

উত্তর:


129

"ওল্ড স্পেস" হ'ল ভি 8 এর পরিচালিত (ওরফে আবর্জনা-সংগৃহীত) হ্যাপের বৃহত্তম (এবং যেখানে জাভাস্ক্রিপ্টের অবজেক্টগুলি বাস করে) সর্বাধিক এবং সবচেয়ে কনফিগারযোগ্য বিভাগ এবং --max-old-space-sizeপতাকাটি তার সর্বোচ্চ আকার নিয়ন্ত্রণ করে। মেমরির ব্যবহার সীমাবদ্ধ হওয়ার সাথে সাথে, ভি 8 অব্যবহৃত স্মৃতি মুক্ত করার প্রয়াসে আবর্জনা সংগ্রহের জন্য আরও বেশি সময় ব্যয় করবে।

যদি হিপ মেমরির খরচ (যেমন লাইভ অবজেক্টস যা জিসি মুক্ত করতে পারে না) সীমা অতিক্রম করে, ভি 8 আপনার প্রক্রিয়াটি (বিকল্পের অভাবে) ক্র্যাশ করবে, তাই আপনি এটিকে খুব কম সেট করতে চান না। অবশ্যই, আপনি যদি এটি খুব বেশি সেট করেন তবে অতিরিক্ত 8 টি হিপ ব্যবহারের ফলে ভি 8 আপনার মেশিনের বাইরে চলে যেতে পারে (এবং বিকল্পের অভাবে এলোমেলো প্রক্রিয়াগুলি অদলবদল বা হত্যা করতে পারে)।

সংক্ষেপে, 2 গিগাবাইট মেমরি সহ একটি মেশিনে আমি সম্ভবত --max-old-space-sizeঅন্যান্য ব্যবহারের জন্য কিছু মেমরি ছেড়ে এবং অদলবদল এড়াতে প্রায় 1.5GB সেট করে রেখেছি ।


4
ঠিক এটিই আমি একটি উত্তর পাওয়ার আশা করছিলাম, প্রান্তের ঘটনাটি বর্ণনা করে যেখানে সিস্টেম বা নোডের কোনও স্মৃতি নেই।
বোরজান্তে 23'18

4
@ জেএমআরকে: মনে হয় আপনি সম্পূর্ণরূপে ঠিক আছেন, তবে আমি যখন 2 জিবি র‌্যাম এবং 4 জিবি সোয়াপ ব্যবহার করছি এবং "- ম্যাক্স-ওল্ড-স্পেস-সাইজ" 4 জিবি সেট করব তখন নোড প্রক্রিয়া সমস্ত র‌্যাম মেমরি গ্রাস করে এবং 1.9 জিবিতে আটকে যায়। প্রশ্নটি এখানে "কেন অদলবদল ব্যবহার এড়ানো হচ্ছে ??" (নোড সংস্করণ 8.11.1)
মণীশ ত্রিবেদী

4
পতাকাটি অন্য কোনও কিছু ওভাররাইড করা উচিত। টাইপগুলির জন্য দয়া করে ডাবল-চেক করুন।
jmrk

4
থেকে d8 --help:--max-old-space-size (max size of the old space (in Mbytes))
jmrk

11

এক্সিকিউটিভ অ্যাপ্লিকেশনটির জন্য বরাদ্দ হওয়া মেমরিটি প্রয়োজনীয় মেমরির চেয়ে কম হলে এই ত্রুটি ঘটে। ডিফল্টরূপে, নোড.জেএস এ মেমরির সীমা 512 এমবি। এই পরিমাণ বাড়ানোর জন্য, আপনাকে মেমোরি সীমা আর্গুমেন্ট সেট করতে হবে —-max-old-space-size। এটি মেমরির সীমাবদ্ধতা সমস্যা এড়াতে সহায়তা করবে।

node --max-old-space-size=1024 index.js #increase to 1gb
node --max-old-space-size=2048 index.js #increase to 2gb
node --max-old-space-size=3072 index.js #increase to 3gb
node --max-old-space-size=4096 index.js #increase to 4gb
node --max-old-space-size=5120 index.js #increase to 5gb
node --max-old-space-size=6144 index.js #increase to 6gb
node --max-old-space-size=7168 index.js #increase to 7gb
node --max-old-space-size=8192 index.js #increase to 8gb

https://medium.com/@vuongtran/how-to-solve-process-out-of-memory-in-node-js-5f0de8f8464c


এবং এটি বরাদ্দ হওয়া রাম মেমরির চেয়ে বেশি হওয়া উচিত
এইচডি ..

আমি নিশ্চিত না যে এটি আর সত্য। অবশ্যই একটি সিস্টেমে আমার নোড 10.20.1 চালানোর অ্যাক্সেস রয়েছে, আমি দেখতে পাচ্ছি (এর সাথে node --v8-options) যে ডিফল্ট রিপোর্ট করা হয়েছে 4096 এবং max-old-space-sizeটেস্ট স্যুটটি সেট না করেই আমি কোনও সমস্যা ছাড়াই 1.5 জিবি বরাদ্দ পেয়েছি। সংযুক্ত মাঝারি নিবন্ধটি ২০১ 2016 সালের তাই এটি সম্ভবত এটি লেখা হওয়ার পরে চলতে চলেছে।
জাইসিয়ার

4
এটার সাথে সহযোগিতা পাওয়া মুশকিল; আমি ভি 8 বা নোডের জন্য ডক্সে স্পষ্ট কিছু খুঁজে পাচ্ছি না। আমি অন্য সিস্টেমটি v10, 12 এবং 14 এর জন্য ডিফল্ট হিসাবে প্রতিবেদন করেছি 0. 0 হিসাবে। এফডাব্লুআইডাব্লু আমি আরও বেশ কয়েকটি সাম্প্রতিক ব্লগার সর্বাধিক মেমোরিটি 1.5Gb হিসাবে উল্লেখ করে খুঁজে পেয়েছি ( tejom.github.io/general/nodejs/v8/debugging/2017/ 01/16 /… ) এবং সেই ভি 12 এর সিস্টেমের উপর ভিত্তি করে একটি গতিশীল সর্বোচ্চ রয়েছে ( idginsiderpro.com/article/3257673/… )।
জেসিআরে

4
node -e "console.log(`node heap limit = ${require('v8').getHeapStatistics().heap_size_limit / (1024 * 1024)} Mb`)"-> v12.18.0 এবং v14.3.0 -> 2096 এমবি, v10.20.1 -> 1432 এমবি
জেসিআর

@ জয়সিয়ার, এই আদেশটি প্রদর্শনের জন্য ধন্যবাদ heap_size_limit। একটি সাধারণ ইউনিক্স শেলের জন্য, এটি আলাদাভাবে উদ্ধৃত করা দরকার:node -e 'console.log(`node heap limit = ${require("v8").getHeapStatistics().heap_size_limit / (1024 * 1024)} Mb`)'
স্যাম ওয়াটকিন্স

10

2020 আপডেট

এই বিকল্পগুলি এখন নোড দ্বারা সরকারীভাবে নথিভুক্ত করা হয় । 2 জিবি মেশিনের জন্য আপনার সম্ভবত ব্যবহার করা উচিত:

NODE_OPTIONS=--max-old-space-size=1536

ব্যবহারের পরিমাণ নির্ধারণ করতে : আপনি লিনাক্স মেশিন ব্যবহার করে উপলব্ধ মেমরি দেখতে পারেন free -m। দ্রষ্টব্য যে আপনি freeএবং buffers/cacheমেমরিটিকে একত্রিত buffers/cacheকরতে পারেন , যেমন ফেলে দেওয়া যেতে পারে (অন্যথায় অব্যবহৃত স্মৃতি ব্যবহার করার জন্য এই বাফার এবং ক্যাশে একটি দুর্দান্ত উপায়)।

সরকারী ডকুমেন্টেশনmax-old-space-size এছাড়াও উল্লেখ জন্য নোট করুন :

2GB মেমরিযুক্ত মেশিনে, এটি 1536 (1.5GB) এ সেট করার কথা বিবেচনা করুন

সুতরাং উপরে মান। বিবেচনা করুন যে বেস ওএসের জন্য প্রয়োজনীয় মেমরির পরিমাণ খুব বেশি পরিবর্তন হয় না, তাই আপনি 4 জিবি মেশিনে আনন্দের সাথে 3.5 করতে পারেন etc.


4
আপনি নোড.জেএস ডক্স থেকে যে লিঙ্কটি ভাগ করেছেন তা থেকে বলা হয়েছে: "2 গিগাবাইট মেমরির একটি মেশিনে, এটি 1536 (1.5GB) এ সেট করার বিষয়টি বিবেচনা করুন"
ইদন দাগান

4
ধন্যবাদ @ ইডানডাগান আমি এটি উত্তরে যুক্ত করব।
মাইকমেকানা

-6

আপনি যে প্রকল্পে কাজ করছেন তা যদি আপনি কেবল এটি তৈরি করতে চান তবে দুটি ধাপ অনুসরণ করুন:

  1. আপনার প্রকল্পে সিডি থেকে নোড_মডিউল / @ কৌণিক সিডি নোড_মডিউল / @ কৌণিক

  2. এখন নীচের কমান্ডটি এক্সপোর্ট করুন NODE_OPTIONS = - সর্বাধিক-পুরাতন-স্থান-আকার = 8192 run


14
পরিবেশের বৈচিত্র্য নির্ধারণের জন্য কেন @angular ডিরেক্টরিতে যেতে হবে?
মিগামজাজার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.