ওম কিলার - মাইএসকিউএল সার্ভারকে হত্যা করেছে


10

আমাদের মাইএসকিউএল মাস্টারের একজন, ওওম কিলার মাইএসকিউএল সার্ভারকে ডেকে আক্রমন করে যা বড় আক্রমণের দিকে পরিচালিত করে। নিম্নলিখিত কার্নেল লগ:

[2006013.230723] mysqld invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0
[2006013.230733] Pid: 1319, comm: mysqld Tainted: P           2.6.32-5-amd64 #1
[2006013.230735] Call Trace:
[2006013.230744]  [<ffffffff810b6708>] ? oom_kill_process+0x7f/0x23f
[2006013.230750]  [<ffffffff8106bde2>] ? timekeeping_get_ns+0xe/0x2e
[2006013.230754]  [<ffffffff810b6c2c>] ? __out_of_memory+0x12a/0x141
[2006013.230757]  [<ffffffff810b6d83>] ? out_of_memory+0x140/0x172
[2006013.230762]  [<ffffffff810baae8>] ? __alloc_pages_nodemask+0x4ec/0x5fc
[2006013.230768]  [<ffffffff812fca02>] ? io_schedule+0x93/0xb7
[2006013.230773]  [<ffffffff810bc051>] ? __do_page_cache_readahead+0x9b/0x1b4
[2006013.230778]  [<ffffffff810652f8>] ? wake_bit_function+0x0/0x23
[2006013.230782]  [<ffffffff810bc186>] ? ra_submit+0x1c/0x20
[2006013.230785]  [<ffffffff810b4e53>] ? filemap_fault+0x17d/0x2f6
[2006013.230790]  [<ffffffff810cae1e>] ? __do_fault+0x54/0x3c3
[2006013.230794]  [<ffffffff812fce29>] ? __wait_on_bit_lock+0x76/0x84
[2006013.230798]  [<ffffffff810cd172>] ? handle_mm_fault+0x3b8/0x80f
[2006013.230803]  [<ffffffff8103a9a0>] ? pick_next_task+0x21/0x3c
[2006013.230808]  [<ffffffff810168ba>] ? sched_clock+0x5/0x8
[2006013.230813]  [<ffffffff81300186>] ? do_page_fault+0x2e0/0x2fc
[2006013.230817]  [<ffffffff812fe025>] ? page_fault+0x25/0x30

এই মেশিনটিতে GB৪ জিবি র‌্যাম রয়েছে।

মাইএসকিএল কনফিগার ভেরিয়েবল নিম্নলিখিত:

innodb_buffer_pool_size        = 48G
innodb_additional_mem_pool_size = 512M
innodb_log_buffer_size         = 64M

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


2
মেমোরি ব্যবহার বেশি হবে চেয়ে 48G+ + 512M+ + 64Mহয় কারণ কিছু ওভারহেড এবং অন্যান্য কাঠামো বিবেচনা; এর জন্য কোথাও কোথাও একটি সূত্র ছিল তবে আমি এখনই এটি খুঁজে পাচ্ছি না। নিশ্চিত নয় যে এর ফলে এটি বয়ে যায় 64G। শুধু নিশ্চিত করার জন্য, freeনিশ্চিত করে 64Gযে প্রথম স্থানে উপলব্ধ?
frostschutz

@ ফ্রসচুটজ: হ্যাঁ, ফ্রি কমান্ড 64৪ জি দেখায়।
প্রদীপচেত্রী

ওওএম কিলারকে মাইএসকিএলড না মারার কথা বলা খুব সম্ভবত সংকটকে অল্প মুহূর্তের জন্য বিলম্ব করবে। আপনার কনফিগারেশন ঠিক করা ভাল।
স্কাই

উত্তর:


25

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

পার্থক্যটি দেখতে আপনার 2 টি সূচক রয়েছে: ভার্চুয়াল মেমরি এবং আবাসিক মেমরি। ভার্চুয়াল প্রক্রিয়া দ্বারা অনুরোধ করা মেমরি, আবাসিক প্রক্রিয়াটি সত্যই ব্যবহৃত মেমরি।

এই সিস্টেমের সাহায্যে আপনি "ওভারবুকিং" এ যেতে পারেন, কার্নেল উপলব্ধের চেয়ে আরও বেশি মেমরি দেয়। তারপরে, যখন আপনার সিস্টেমটি ফ্রি মেমরি এবং অদলবদলের 0 বাইটে চলে যায়, নিখরচায় স্মৃতি অর্জনের জন্য তাকে অবশ্যই একটি প্রক্রিয়া ত্যাগ (হত্যা) করতে হবে।

ওম কিলার যখন অ্যাকশনে চলে যায় তখনই। ওওএম তার মেমোরির খরচ এবং অন্যান্য অনেক উপাদানগুলির ভিত্তিতে একটি প্রক্রিয়া নির্বাচন করে (পিতামাতার তার সন্তানদের স্কোরের 1/2 লাভ হয়; এটি যদি মূল মালিকানাধীন প্রক্রিয়া হয় তবে স্কোর 4 দ্বারা ভাগ করা হয় ইত্যাদি etc লিনাক্স- MM.org/OOM_Killer

আপনি /proc/MySQL_PID/oom_adjফাইল টিউন করে OOM স্কোরিংয়ের উপর প্রভাব ফেলতে পারেন । এটি সেট করে -17, আপনার প্রক্রিয়া কখনও হত্যা করা হবে না। তবে এটি করার আগে , আপনার মাইএসকিউএল মেমরির ব্যবহার সীমাবদ্ধ করার জন্য আপনার মাইএসকিউএল কনফিগারেশন ফাইলটিকে টুইট করতে হবে। অন্যথায়, ওওম কিলার অন্যান্য সিস্টেম প্রক্রিয়া (যেমন এসএসএইচ, ক্রোনটব, ইত্যাদি ...) মেরে ফেলবে এবং আপনার সার্ভারটি খুব অস্থিতিশীল অবস্থায় থাকবে, যা ডেটা দুর্নীতিতে ডেকে আনবে যা কোনও কিছুর চেয়ে খারাপ।

এছাড়াও, আপনি আরও অদলবদল বিবেচনা করতে পারেন।

[Edit]

আপনি এই 2 টি সিস্টেলের মাধ্যমে এটির ওভার কমিট আচরণটিও পরিবর্তন করতে পারেন:

vm.overcommit_memory
vm.overcommit_ratio

কার্নেল ডকুমেন্টেশন হিসাবে বলা হয়েছে

overcommit_memory:

এই মানটিতে একটি পতাকা রয়েছে যা মেমরির ওভার কমিটিকে সক্ষম করে।

যখন এই পতাকাটি 0 হয়, যখন ব্যবহারকারী স্থান আরও মেমরির জন্য অনুরোধ করে তখন কার্নেলটি মুক্ত মেমরির পরিমাণটি অনুমান করার চেষ্টা করে।

যখন এই পতাকাটি 1 হয়, কার্নেল ভান করে যে এটি উপস্থিত না হওয়া পর্যন্ত সর্বদা পর্যাপ্ত মেমরি থাকে।

যখন এই পতাকাটি 2 হয়, কার্নেল একটি "কখনই ওভার কমমিট" নীতি ব্যবহার করে না যা মেমরির কোনও ওভার কমিট প্রতিরোধ করার চেষ্টা করে। নোট করুন যে ব্যবহারকারী_রিজার_কবিটিস এই নীতিটিকে প্রভাবিত করে।

এই বৈশিষ্ট্যটি খুব কার্যকর হতে পারে কারণ প্রচুর প্রোগ্রাম রয়েছে যে মেলোক () বিপুল পরিমাণ মেমরি "জাস্ট-ইন-কেস" করে এবং এর বেশি ব্যবহার করে না।

ডিফল্ট মান 0 হয়।

আরও তথ্যের জন্য ডকুমেন্টেশন / ভিএম / ওভারকমিট-অ্যাকাউন্টিং এবং সুরক্ষা / কমনক্যাপ.সি .: ক্যাপ_ভিএম_অনফ_মেমরি () দেখুন।

overcommit_ratio:

যখন overcommit_memory 2 তে সেট করা থাকে, তখন প্রতিশ্রুতিবদ্ধ ঠিকানার জায়গাকে অদলবদলের সাথে এই শারীরিক র‌্যামের শতাংশেরও বেশি অতিক্রম করার অনুমতি দেওয়া হয় না। উপরে দেখুন.

[/ Edit]


1
এটি সঠিক উত্তর। আমি এটিকে ঠিকoom_score_adj করার জন্য চারপাশে নিবন্ধগুলি দেখছি , তবে তারা সত্যিই স্কোর প্রক্রিয়াটি বুঝতে পারে না।
3manuek
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.