সেন্ট ওএস: আমি কীভাবে মেমরির অতিরিক্ত কমিটি বন্ধ করব বা হ্রাস করব এবং এটি করা কি নিরাপদ?


20

সময়ে সময়ে "আমার" সার্ভার স্টল করে কারণ এটি মেমরি এবং অদলবদল স্থান উভয়েরই বাইরে চলে। (এটি পিংয়ের প্রতিক্রিয়া অব্যাহত রাখে তবে এর চেয়ে বেশি কিছুই নয়, এমনকি এসএসএসও নয়)।

আমাকে বলা হয়েছে লিনাক্স মেমোরি ওভার কমমিটমেন্ট করে না, যা আমি যতদূর বুঝতে পেরেছি অর্থের সাথে একই রকম: এটি আসলে উপলব্ধের চেয়ে বেশি মেমরি প্রসেস করার জন্য অনুদান দেয়, ধরে নেওয়া যায় যে বেশিরভাগ প্রক্রিয়াগুলি আসলে তাদের জিজ্ঞাসা করা সমস্ত স্মৃতি ব্যবহার করবে না অন্তত একই সময়ে না।

অনুগ্রহ করে ধরে নিন যে এটির কারণেই আমার সিস্টেমটি মাঝেমধ্যে স্তব্ধ হয়ে যায়, আসুন এটি কি না তা এখানে আলোচনা করা যাক না (দেখুন কোনও সার্ভারে সমস্ত পরিষেবা নিচে নেমে যেতে পারে, তবুও পিংয়ের প্রতিক্রিয়া জানাচ্ছে এবং কীভাবে চিত্র বের করা যায় ) ।

সুতরাং,

  1. আমি কীভাবে সেন্টস-এ মেমরির অত্যধিক কমিটিকে অক্ষম বা কমাতে পারি? আমি দুটি vm.overcommit_memory (মান 0, 1, বা 2) এবং vm.overcommit_ratiom নামক দুটি সেটিংস পড়েছি তবে আমি কোথায় জানি সেগুলি সন্ধান করতে এবং পরিবর্তন করতে হবে (কিছু কনফিগারেশন ফাইল আশা করি), আমার কোন মানগুলি চেষ্টা করা উচিত , এবং পরিবর্তনগুলি কার্যকর করতে আমার সার্ভারটি পুনরায় বুট করা দরকার কিনা।

  2. এবং এটি নিরাপদ? আমি কোন পার্শ্ব প্রতিক্রিয়া আশা করতে পারি? অতিরিক্ত কমিট_মেমোরির জন্য গুগল করার সময় আমি এমন ভীতিকর জিনিস দেখতে পাই যে লোকেরা বলে যে তাদের সার্ভার আর বুট করতে পারে না ....

যেহেতু মেমরির ব্যবহারের আকস্মিক বৃদ্ধির কারণ হ'ল মাইএসকিএল কারণ পিএইচপি দ্বারা তৈরি করা প্রশ্নগুলি যা পরিবর্তিতভাবে HTTP অনুরোধগুলি পরিবেশন করার সময় বলা হয়, তাই আমি আশা করি যে কিছু পিএইচপি স্ক্রিপ্ট সম্পূর্ণ করতে ব্যর্থ হবে এবং তাই সময়ে সময়ে প্রায় 500 টি প্রতিক্রিয়া হবে would সার্ভারটি খুব ব্যস্ত, যা আমি নিতে পারি এমন ঝুঁকি (পুরো সার্ভারটি অ্যাক্সেসযোগ্য হয়ে উঠেছে এবং এটিকে পুনরায় বুট করতে হবে) এটি আরও ভাল।

বা যদি আমি ভুল সেটিংস চয়ন করি তবে এটি সত্যই আমার সার্ভারটিকে পুনরায় চালু করতে অক্ষম করতে পারে?


1
যখন আপনি সত্যিই স্মৃতিশক্তি হারিয়ে ফেলছেন তখন অতিরিক্ত কমিট অক্ষম করা আপনাকে সাহায্য করবে না । যদিও সার্ভারে র‌্যাম যুক্ত করা সাহায্য করতে পারে।
মাইকেল হ্যাম্পটন

2
অতিরিক্ত কমিট অক্ষম করা চূড়ান্ত সমাধান হতে চলেছে না তবে এটি অনেক সাহায্য করবে, যদি কোনও সময় সার্ভার মেমরি থেকে চলে যায় (যা কয়েক সেকেন্ডের জন্য দীর্ঘসময় প্রতি একবার হয়) আমার কেবল কয়েকটি http অনুরোধ বাতিল হয়েছে (বা খারাপভাবে পরিবেশন করা), সম্পূর্ণরূপে এবং চিরকালের জন্য আমার সার্ভার ডিআইই না হওয়ার পরিবর্তে (আমি এটি পুনরায় আরম্ভ না করা পর্যন্ত)
ম্যাটটিও

উত্তর:


30

মেমরি ওভারকমিট দ্বারা অক্ষম করা যেতে পারে vm.overcommit_memory=2

0 হল ডিফল্ট মোড, যেখানে কর্নেল হিউরিস্টিকভাবে বরাদ্দ অনুরোধের তুলনায় ফ্রি মেমরি গণনা করে বরাদ্দ নির্ধারণ করে। এবং এটি 1 এ সেট করা উইজার্ড্রি মোড সক্ষম করে, যেখানে কার্নেল সর্বদা বিজ্ঞাপন দেয় যে কোনও বরাদ্দের জন্য পর্যাপ্ত ফ্রি মেমরি রয়েছে। 2 এ সেট করার অর্থ হল যে প্রক্রিয়াগুলি কেবলমাত্র একটি overcommit_ratioর‌্যামের কনফিগারযোগ্য পরিমাণ ( ) পর্যন্ত বরাদ্দ করতে পারে এবং যখন পরিমাণটি ছাড়িয়ে যায় তখন বরাদ্দ ব্যর্থতা বা OOM বার্তা পাওয়া শুরু করবে।

এটা কি নিরাপদ, না। আপনি কাজের চাপ এবং হার্ডওয়্যার সক্ষমতা সম্পর্কে 100% নির্দিষ্ট না হলে আমি যথাযথ ব্যবহারের ক্ষেত্রে দেখিনি যেখানে মেমরি ওভারকমিটকে অক্ষম করা আসলেই সহায়তা করেছিল। আপনি যদি আগ্রহী হন তবে kernel-docsপ্যাকেজ ইনস্টল করুন এবং /Documentation/sysctl/vm.txtআরও পড়তে যান বা অনলাইনে পড়ুন

যদি আপনি সেট করেন vm.overcommit_memory=2তবে এটি শারীরিক র‌্যামের কনফিগারেশনের শতাংশ পর্যন্ত vm.overcommit_ratioডিফল্ট হবে (ডিফল্ট 50%)।

echo 0/1/2 > /proc/sys/vm/overcommit_memory 

এটি পুনরায় বুট থেকে বাঁচবে না। অধ্যবসায়ের জন্য, এটি /etc/sysctl.confফাইলে রাখুন:

vm.overcommit_memory=X

এবং চালান sysctl -p। পুনরায় বুট করার দরকার নেই।


আপনি যে অংশটির উত্তর না দিয়েছিলেন তা হ'ল আমি সেই ফাইলটি vm.memory_overcommit সেটিংটি পরিবর্তন করেছি এবং বিশেষত এটি কার্যকর করার জন্য আমাকে পুনরায় বুট করতে হবে (বা অন্য কী)
ম্যাটটিও

2
প্রতিধ্বনি 0/1/2> / proc / sys / vm / overcommit_memory এটি পুনরায় বুট করবে না। অধ্যবসায়ের জন্য, এটি /etc/sysctl.conf ফাইলটি vm.overcommit_memory = X এ রাখুন এবং সিস্টেপ্ট-পি চালান। পুনরায় বুট করার দরকার নেই
সোহম চক্রবর্তী

অনেক ধন্যবাদ. আপনি দয়া করে এটিকে উত্তর সংস্থায় যুক্ত করুন যাতে আমি এটি আনুষ্ঠানিকভাবে "গ্রহণ" করতে পারি।
ম্যাটটিও

1
নতুন অংশ যুক্ত হয়েছে।
সোহম চক্রবর্তী

4
ওভারকমিট_মেমোরি = 2 ব্যবহার করার সময় "ওভারকমিট_রেটিও" এর একটি গুরুত্বপূর্ণ প্রভাব রয়েছে - এটি শারীরিক র‌্যামের শতাংশ নির্ধারণ করে যা বরাদ্দ করার অনুমতি দেওয়া হয়! সুতরাং যদি অনুপাত <100 তবে আপনি কিছু র‌্যামকে অবিরত ছাড়বেন, সম্ভবত ডিস্ক ক্যাশে বা অনুরূপ জন্য। ডিফল্ট অনুপাত 50% তাই আপনি যদি এটি পরিবর্তন না করেন তবে আপনি কেবল শারীরিক র্যামের 50% ব্যবহার করবেন!
ডেভিড গার্ডনার

6

সম্পূর্ণরূপে অযোগ্য বিবৃতি: মেমরির অতিরিক্ত কমিটটি সক্ষম করা অবশ্যই এটি সক্ষম করার চেয়ে "নিরাপদ"।

$ গ্রাহক এটি কয়েক শ ওয়েব সার্ভারে সেট করেছেন এবং এটি স্থিতিশীলতার সমস্যাগুলিকে অনেকটা সহায়তা করেছে। এমনকি এটি কোনও অক্ষম না হলে কোনও নাগিও সত্যই জোরে আগুনের ডাক দেয় check

অন্যদিকে, লোকেরা এটিকে "নিরাপদ" হিসাবে বিবেচনা না করে তাদের প্রক্রিয়াগুলি মেমরি থেকে বেরিয়ে আসা যখন তারা কেবলমাত্র একটি সামান্য ম্যামকে অতিবাহিত করতে পছন্দ করে এবং সত্যই কখনও তা ব্যবহার করে না। (যেমন এসএপি খুব ভাল উদাহরণ হবে)

সুতরাং, এটি আপনার জন্য জিনিসগুলির উন্নতি করে কিনা তা আপনি ফিরে এসেছেন। যেহেতু আপনি ইতিমধ্যে সম্পর্কিত বিষয়গুলি থেকে মুক্তি পেতে এটি অনুসন্ধান করছেন - আমার ধারণা এটি আপনার পক্ষে সহায়ক হতে পারে।

(আমি জানি আমি কিছু অসম্পূর্ণ ব্যক্তি দ্বারা একটি ডাউনটোটের ঝুঁকি নেব)


3

আমি সম্মত হই যে ওভার কমিটকে অক্ষম করা কিছু পরিস্থিতিতে এটি সক্ষম করার চেয়ে নিরাপদ। যদি সার্ভারটি কেবলমাত্র কয়েকটি বড় মেমরি চাকরি চালায় (যেমন আমার ক্ষেত্রে সার্কিটের সিমুলেশনগুলি) তবে কোনও OOM ইভেন্টের অপেক্ষা না করে মেমরির অনুরোধটি সামনে অগ্রাহ্য করা অস্বীকার করা আরও নিরাপদ (যা শীঘ্রই অনুসরণ করা নিশ্চিত) বেশিরভাগ ক্ষেত্রেই আমরা সার্ভারগুলি দেখতে পাই OOM হত্যাকারীর কাজটি করার পরে সমস্যা রয়েছে।

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