আমার প্রক্রিয়াটি না খোলার জন্য কীভাবে লিনাক্স ওওএম ঘাতক পাবেন?


28

শারীরিক স্মৃতিশক্তি কম থাকলেও অদলবদলে প্রচুর পরিমাণে থাকার সময় আমি কীভাবে লিনাক্স ওওএম কিলারকে আমার প্রক্রিয়াগুলি না মেরে দিতে পারি?

আমি সিওএসটিএল vm.overcommit_memory = 2 দিয়ে ওওএম কিলিং এবং ওভার কমিট অক্ষম করেছি।

ভিএম-তে 3 গিগাবাইট নিখরচায় নিখরচায় অদলবদলযুক্ত অদলবদল রয়েছে এবং যে প্রক্রিয়াগুলিতে OOM নিহত হচ্ছে তা 200MB এর চেয়ে কম মেমরির ব্যবহার করে।

আমি জানি যে দীর্ঘমেয়াদী অদলবদল পারফরম্যান্সের জন্য ভয়ঙ্কর হয়ে উঠবে তবে ভ্যালগ্রাইন্ডের অধীনে ফাংশনাল টেস্টিংয়ের জন্য এখনই আমার সোয়াপটি ব্যবহার করা দরকার যেখানে মেমরির প্রয়োজনীয়তা অনেক বেশি।

Mar  7 02:43:11 myhost kernel: memcheck-amd64- invoked oom-killer: gfp_mask=0x24002c2, order=0, oom_score_adj=0
Mar  7 02:43:11 myhost kernel: memcheck-amd64- cpuset=/ mems_allowed=0
Mar  7 02:43:11 myhost kernel: CPU: 0 PID: 3841 Comm: memcheck-amd64- Not tainted 4.4.0-x86_64-linode63 #2
Mar  7 02:43:11 myhost kernel: Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.8.2-0-g33fbe13 by qemu-project.org 04/01/2014
Mar  7 02:43:11 myhost kernel: 0000000000000000 0000000000000000 ffffffff8158cbcc ffff880032d7bc18
Mar  7 02:43:11 myhost kernel: ffffffff811c6a55 00000015118e701d ffffffff81044a8d 00000000000003e2
Mar  7 02:43:11 myhost kernel: ffffffff8110f5a1 0000000000000000 00000000000003e2 ffffffff81cf15cc
Mar  7 02:43:11 myhost kernel: Call Trace:
Mar  7 02:43:11 myhost kernel: [<ffffffff8158cbcc>] ? dump_stack+0x40/0x50
Mar  7 02:43:11 myhost kernel: [<ffffffff811c6a55>] ? dump_header+0x59/0x1dd
Mar  7 02:43:11 myhost kernel: [<ffffffff81044a8d>] ? kvm_clock_read+0x1b/0x1d
Mar  7 02:43:11 myhost kernel: [<ffffffff8110f5a1>] ? __raw_callee_save___pv_queued_spin_unlock+0x11/0x1e
Mar  7 02:43:11 myhost kernel: [<ffffffff81183316>] ? oom_kill_process+0xc0/0x34f
Mar  7 02:43:11 myhost kernel: [<ffffffff811839b2>] ? out_of_memory+0x3bf/0x406
Mar  7 02:43:11 myhost kernel: [<ffffffff81187bbd>] ? __alloc_pages_nodemask+0x8ba/0x9d8
Mar  7 02:43:11 myhost kernel: [<ffffffff811b82e8>] ? alloc_pages_current+0xbc/0xe0
Mar  7 02:43:11 myhost kernel: [<ffffffff811b096c>] ? __vmalloc_node_range+0x12d/0x20a
Mar  7 02:43:11 myhost kernel: [<ffffffff811e0e62>] ? alloc_fdtable+0x6a/0xd8
Mar  7 02:43:11 myhost kernel: [<ffffffff811b0a83>] ? __vmalloc_node+0x3a/0x3f
Mar  7 02:43:11 myhost kernel: [<ffffffff811e0e62>] ? alloc_fdtable+0x6a/0xd8
Mar  7 02:43:11 myhost kernel: [<ffffffff811b0ab0>] ? vmalloc+0x28/0x2a
Mar  7 02:43:11 myhost kernel: [<ffffffff811e0e62>] ? alloc_fdtable+0x6a/0xd8
Mar  7 02:43:11 myhost kernel: [<ffffffff811e1338>] ? dup_fd+0x103/0x1f0
Mar  7 02:43:11 myhost kernel: [<ffffffff810dd143>] ? copy_process+0x5aa/0x160d
Mar  7 02:43:11 myhost kernel: [<ffffffff8110f5a1>] ? __raw_callee_save___pv_queued_spin_unlock+0x11/0x1e
Mar  7 02:43:11 myhost kernel: [<ffffffff810de2fc>] ? _do_fork+0x7d/0x291
Mar  7 02:43:11 myhost kernel: [<ffffffff810ea186>] ? __set_current_blocked+0x47/0x52
Mar  7 02:43:11 myhost kernel: [<ffffffff810ea1f2>] ? sigprocmask+0x61/0x6a
Mar  7 02:43:11 myhost kernel: [<ffffffff81998eae>] ? entry_SYSCALL_64_fastpath+0x12/0x71
Mar  7 02:43:11 myhost kernel: Mem-Info:
Mar  7 02:43:11 myhost kernel: active_anon:15 inactive_anon:18 isolated_anon:0
Mar  7 02:43:11 myhost kernel: active_file:7 inactive_file:8 isolated_file:0
Mar  7 02:43:11 myhost kernel: unevictable:0 dirty:3 writeback:26 unstable:0
Mar  7 02:43:11 myhost kernel: slab_reclaimable:1798 slab_unreclaimable:3674
Mar  7 02:43:11 myhost kernel: mapped:8 shmem:1 pagetables:752 bounce:0
Mar  7 02:43:11 myhost kernel: free:1973 free_pcp:0 free_cma:0
Mar  7 02:43:11 myhost kernel: Node 0 DMA free:3944kB min:60kB low:72kB high:88kB active_anon:0kB inactive_anon:0kB active_file:28kB inactive_file:32kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:15992kB managed:15908kB
 mlocked:0kB dirty:0kB writeback:0kB mapped:0kB shmem:0kB slab_reclaimable:72kB slab_unreclaimable:236kB kernel_stack:48kB pagetables:60kB unstable:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB writeback_tmp:0kB pages_scanned:36
0 all_unreclaimable? yes
Mar  7 02:43:11 myhost kernel: lowmem_reserve[]: 0 972 972 972
Mar  7 02:43:11 myhost kernel: Node 0 DMA32 free:3948kB min:3956kB low:4944kB high:5932kB active_anon:60kB inactive_anon:72kB active_file:0kB inactive_file:0kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:1032064kB manag
ed:999552kB mlocked:0kB dirty:12kB writeback:104kB mapped:32kB shmem:4kB slab_reclaimable:7120kB slab_unreclaimable:14460kB kernel_stack:2112kB pagetables:2948kB unstable:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB writeback_t
mp:0kB pages_scanned:792 all_unreclaimable? yes
Mar  7 02:43:11 myhost kernel: lowmem_reserve[]: 0 0 0 0
Mar  7 02:43:11 myhost kernel: Node 0 DMA: 20*4kB (UM) 17*8kB (UM) 13*16kB (M) 14*32kB (UM) 8*64kB (UM) 4*128kB (M) 4*256kB (M) 0*512kB 1*1024kB (M) 0*2048kB 0*4096kB = 3944kB
Mar  7 02:43:11 myhost kernel: Node 0 DMA32: 934*4kB (UM) 28*8kB (UM) 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 3960kB
Mar  7 02:43:11 myhost kernel: 71 total pagecache pages
Mar  7 02:43:11 myhost kernel: 42 pages in swap cache
Mar  7 02:43:11 myhost kernel: Swap cache stats: add 245190, delete 245148, find 77026/136093
Mar  7 02:43:11 myhost kernel: Free swap  = 3118172kB
Mar  7 02:43:11 myhost kernel: Total swap = 3334140kB
Mar  7 02:43:11 myhost kernel: 262014 pages RAM
Mar  7 02:43:11 myhost kernel: 0 pages HighMem/MovableOnly
Mar  7 02:43:11 myhost kernel: 8149 pages reserved
Mar  7 02:43:11 myhost kernel: [ pid ]   uid  tgid total_vm      rss nr_ptes nr_pmds swapents oom_score_adj name
Mar  7 02:43:11 myhost kernel: [ 2054]     0  2054     5101        1      15       4      283             0 upstart-udev-br
Mar  7 02:43:11 myhost kernel: [ 2063]     0  2063    12362        1      28       4      184         -1000 systemd-udevd
Mar  7 02:43:11 myhost kernel: [ 3342]   102  3342     9780        1      23       3       89             0 dbus-daemon
Mar  7 02:43:11 myhost kernel: [ 3423]     0  3423    10864        1      26       3       85             0 systemd-logind
Mar  7 02:43:11 myhost kernel: [ 3441]     0  3441    15344        0      34       3      184         -1000 sshd
Mar  7 02:43:11 myhost kernel: [ 3450]     0  3450     4786        0      14       3       43             0 atd
Mar  7 02:43:11 myhost kernel: [ 3451]     0  3451     5915        0      17       4       65             0 cron
Mar  7 02:43:11 myhost kernel: [ 3457]   101  3457    63962        0      28       3      202             0 rsyslogd
Mar  7 02:43:11 myhost kernel: [ 3516]     0  3516     3919        1      13       3      156             0 upstart-file-br
Mar  7 02:43:11 myhost kernel: [ 3518]     0  3518     4014        0      13       3      265             0 upstart-socket-
Mar  7 02:43:11 myhost kernel: [ 3557]     0  3557    66396        0      32       3     1802             0 fail2ban-server
Mar  7 02:43:11 myhost kernel: [ 3600]     0  3600     3956        1      13       3       39             0 getty
Mar  7 02:43:11 myhost kernel: [ 3601]     0  3601     3198        1      12       3       37             0 getty
Mar  7 02:43:11 myhost kernel: [ 3673]     0  3673    26411        1      55       3      252             0 sshd
Mar  7 02:43:11 myhost kernel: [ 3740]  1000  3740    26411        1      52       3      253             0 sshd
Mar  7 02:43:11 myhost kernel: [ 3741]  1000  3741     5561        0      16       3      431             0 bash
Mar  7 02:43:11 myhost kernel: [ 3820]   103  3820     7863        1      21       3      152             0 ntpd
Mar  7 02:43:11 myhost kernel: [ 3837]  1000  3837    31990        0      58       4    12664             0 memcheck-amd64-
Mar  7 02:43:11 myhost kernel: [ 3841]  1000  3841    32006        0      59       4    12812             0 memcheck-amd64-
Mar  7 02:43:11 myhost kernel: [ 3844]  1000  3844    31950        0      57       4    12035             0 memcheck-amd64-
Mar  7 02:43:11 myhost kernel: [ 3849]  1000  3849    31902        0      56       4    11482             0 memcheck-amd64-
Mar  7 02:43:11 myhost kernel: [ 3853]  1000  3853     1087        0       7       3       27             0 lsof
Mar  7 02:43:11 myhost kernel: [ 3854]     0  3854    26140        5      55       3      230             0 sshd
Mar  7 02:43:11 myhost kernel: [ 3855]   104  3855    15699        0      33       3      202             0 sshd
Mar  7 02:43:11 myhost kernel: Out of memory: Kill process 3841 (memcheck-amd64-) score 11 or sacrifice child
Mar  7 02:43:11 myhost kernel: Killed process 3841 (memcheck-amd64-) total-vm:128024kB, anon-rss:0kB, file-rss:0kB

এটি / প্রোক / মেমিনফো

MemTotal:        1015460 kB
MemFree:          277508 kB
MemAvailable:     322032 kB
Buffers:            8336 kB
Cached:            42208 kB
SwapCached:        46088 kB
Active:            58844 kB
Inactive:         116100 kB
Active(anon):      34784 kB
Inactive(anon):    89620 kB
Active(file):      24060 kB
Inactive(file):    26480 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       3334140 kB
SwapFree:        3215756 kB
Dirty:                16 kB
Writeback:             0 kB
AnonPages:        121128 kB
Mapped:            15072 kB
Shmem:                 4 kB
Slab:              22668 kB
SReclaimable:       8028 kB
SUnreclaim:        14640 kB
KernelStack:        2016 kB
PageTables:         2532 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     3841868 kB
Committed_AS:     380460 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
DirectMap4k:       14208 kB
DirectMap2M:     1034240 kB
DirectMap1G:           0 kB

8
কল ট্রেস থেকে এটি স্পষ্টভাবে স্পষ্ট যে কর্নেলের পর্যাপ্ত মেমরি নেই। কেন এটি অদলবদল হয়নি, এর বিভিন্ন কারণ হতে পারে, এর সবগুলিই 500 वर्णগুলিতে সম্পূর্ণরূপে ব্যাখ্যা করতে খুব দীর্ঘ। তবে আপনার দেখে মনে হচ্ছে এটি পুনরুদ্ধারযোগ্য পৃষ্ঠাগুলি ছিল না ( all_unreclaimableহ্যাঁ)। এই পৃষ্ঠাগুলি র‌্যামে লক করা আছে, সাধারণত এগুলি পিন করা বা কার্নেলের দ্বারা ব্যবহৃত হয় because আপনি র‌্যামে যা কিছু রেখেছিলেন তা সেই সময়ে অদলবদলযোগ্য ছিল না; সবকিছু যে পারে ইতিমধ্যে আউট আনা হয়েছে ছিলেন। আবার, সমাধানটি আরও র‌্যাম।
মাইকেল হ্যাম্পটন

1
@ মিশেলহ্যাম্পটন বাকী স্মৃতি নিয়মিত অ্যাপ্লিকেশন দ্বারা ব্যবহৃত হচ্ছে। কেন কার্নেল তাদের অদলবদল করতে ঠেলাতে পারে না? দয়া করে আমার প্রশ্নের জবাব দিন "আপনি যা বলছেন তা যদি সত্য হয় তবে সমস্ত শারীরিক স্মৃতি ব্যবহার করার পরে কোনও প্রক্রিয়া কীভাবে কাঁটাচামচ হতে পারে?"
কোডার

1
@ মিশেলহ্যাম্পটন আমি কাঁটাচামচটি অক্ষম করছি এবং এখন ব্যর্থ 2ban আমার প্রক্রিয়াগুলিকে হত্যা করার জন্য ওম কিলারকে অনুরোধ করছে। যদি কার্নেলটি এটি ব্যবহার না করে তবে অদলবদল করার কী আছে? আরও গুরুত্বপূর্ণ বিষয়, আমি কীভাবে কার্নেলটি কনফিগার করব যাতে এটির স্মৃতিশক্তি শেষ হয়ে যায়।
কোডার

4
@ ম্যাথিউআইফ: উত্তরটি যদি আপনি জানেন তবে দয়া করে এটি এখানে পোস্ট করুন। স্ট্যাক এক্সচেঞ্জের সাইটগুলি যারা পড়েছেন কেবল তারই সুবিধার জন্য, প্রশ্নটি জিজ্ঞাসা করা ওপি নয়।
আর ..

4
কোনও ভিএম-এ অদলবদলকে সেরা অনুশীলন হিসাবে বিবেচনা করা হয় না। আপনার ভিএম আরও প্রকৃত মেমরি বরাদ্দ করুন। আপনি যদি আরও মেমরি যোগ করতে না পারেন তবে এটিকে ঘরে বসে কোনও ভাড়ার ভাড়ার পরিবর্তে শারীরিক হার্ডওয়্যারটিতে আনুন।
ক্রিগগি

উত্তর:


36

এটি দুটি কারণের সংমিশ্রণে সমস্যা বলে মনে হচ্ছে:

  • ভার্চুয়াল মেশিন ব্যবহার করা।
  • একটি সম্ভাব্য কার্নেল বাগ।

এটি আংশিকভাবে একটি লাইন যা এটি কেন ঘটে তা বর্ণনা করে:

মার্চ 7 02:43:11 মায়োস্টের কার্নেল: মেমচেক-এমডি 64- আহ্বান করা ওম-কিলার: জিএফপি_মাস্ক = 0x24002c2, অর্ডার = 0, ওম_স্কোর_এডজে = 0

অন্য লাইনটি হ'ল:

Mar  7 02:43:11 myhost kernel: 0 pages HighMem/MovableOnly

| প্রথম লাইনটি বরাদ্দের জন্য নির্ধারিত জিএফপি মাস্ক। এটি মূলত বর্ণনা করে যে এই অনুরোধটি সন্তুষ্ট করার জন্য কার্নেলকে কী অনুমোদিত / না করার অনুমতি দেওয়া হয়েছে। মুখোশটি স্ট্যান্ডার্ড পতাকাগুলির একটি গোছা নির্দেশ করে। শেষ বিট, '2' তবে মেমরির বরাদ্দ HighMemজোন থেকে আসা উচিত ।

আপনি যদি ওওএম আউটপুটটি ঘনিষ্ঠভাবে দেখে থাকেন তবে আপনি দেখতে পাবেন যে কোনও HighMem/Normalজোন আসলেই নেই।

Mar  7 02:43:11 myhost kernel: Node 0 DMA: 20*4kB (UM) 17*8kB (UM) 13*16kB (M) 14*32kB (UM) 8*64kB (UM) 4*128kB (M) 4*256kB (M) 0*512kB 1*1024kB (M) 0*2048kB 0*4096kB = 3944kB
Mar  7 02:43:11 myhost kernel: Node 0 DMA32: 934*4kB (UM) 28*8kB (UM) 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 3960kB

HighMem(সাধারণত Normalx86_64 এও বলা হয়) স্ট্যান্ডার্ড 896MiB এর বাইরে জোনগুলির জন্য মেমরির মানচিত্রের দিকে ঝোঁক দেয় 32 বিট সিস্টেমে সরাসরি কার্নেল অ্যাক্সেসযোগ্য। , X86_64 উপর HighMem/Normalআকার 3GiB উপরে সকল পৃষ্ঠা আবরণ বলে মনে হয়।

DMA32মেমরির জন্য ব্যবহৃত এমন একটি অঞ্চল রয়েছে যা 32-বিট ডিএমএ ডিভাইসে অ্যাক্সেসযোগ্য হবে, এটাই আপনি 4 বাইট পয়েন্টার দিয়ে তাদের সম্বোধন করতে পারেন। আমি বিশ্বাস করি DMA16 বিট ডিএমএ ডিভাইসের জন্য।

সাধারণভাবে বলতে গেলে, স্বল্প মেমরির সিস্টেমে Normalঅস্তিত্ব থাকবে না, যা DMA32ইতিমধ্যে সমস্ত উপলব্ধ ভার্চুয়াল ঠিকানাগুলি coversেকে দেয়।

আপনার OOM হত্যার কারণটি HighMem0 টি পৃষ্ঠা সহ একটি জোনের জন্য একটি মেমরি বরাদ্দ রয়েছে । মেমোরি হ্যান্ডলারের বাইরে থাকাটি এই জোনটিকে অদলবদল করে, অন্যান্য প্রক্রিয়াগুলি বা অন্য কোনও কৌশলকে মেরে ফেলে পৃষ্ঠাগুলি তৈরি করার পক্ষে সন্তুষ্ট হওয়ার কোনও উপায় নেই, OOM- ঘাতক কেবল এটিকে হত্যা করে।

আমি বিশ্বাস করি এটি হোস্ট ভিএম বুলেটিংয়ের কারণে বেলুনিংয়ের কারণে ঘটে। কেভিএম সিস্টেমে দুটি মান সেট করতে পারেন।

  • বর্তমান স্মৃতি।
  • উপলব্ধ স্মৃতি।

এটি যেভাবে কাজ করে তা হ'ল আপনি উপলব্ধ সার্ভারে আপনার সার্ভারে মেমরিটিকে হট-অ্যাড করতে পারেন। আপনার সিস্টেমটি আসলে বর্তমান মেমরি দেওয়া হয়।

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

এটা আমার বিশ্বাস এখানে কি ঘটেছে। লিনোড আপনাকে সিস্টেমের শুরুতে আরও অনেক কিছু দিয়ে মেমোরিটি প্রসারিত করতে দেয়।

এর অর্থ এই যে Normal/HighMemসিস্টেমগুলির আজীবন শুরুতে একটি জোন রয়েছে। হাইপারভাইজার এটিকে বেলুন করে ফেললে, সাধারণ অঞ্চলটি মেমরি পরিচালক থেকে যথাযথভাবে অদৃশ্য হয়ে যায়। তবে, আমি সন্দেহ করি যে উল্লিখিত অঞ্চলটি বরাদ্দ করার জন্য উপলভ্য কিনা তা কখন নির্ধারণ করা উচিত নয় not এটি কার্নেলকে অস্তিত্বহীন এমন অঞ্চল থেকে বরাদ্দ দেওয়ার প্রচেষ্টা করতে পরিচালিত করে।

সমাধানের ক্ষেত্রে আপনার কাছে দুটি বিকল্প রয়েছে।

  1. এটি সত্যই কোনও ত্রুটিযুক্ত, আচরণের প্রত্যাশিত বা আমি যা বলছি তার সাথে কিছুই করার জন্য কিছুই নয় কিনা তা দেখার জন্য কার্নেল মেলিং তালিকাগুলিতে এনে আনুন।

  2. অনুরোধ করুন যে লিনোড সিস্টেমটিতে 'উপলভ্য মেমরি' সেট করে 'বর্তমান স্মৃতি' হিসাবে একই 1GiB অ্যাসাইনমেন্ট। ফলসটি পরিষ্কার রাখার ফলে সিস্টেমটি কখনও বেলুন দেয় না এবং বুটে কোনও সাধারণ অঞ্চল পায় না। শুভকামনা তাদের এমনটি করার জন্য!

আপনি কেভিএম 6GiB- তে উপলভ্য সেটিংসে নিজস্ব ভিএম সেট আপ করে, 1GiB- র বর্তমান এবং আপনার উপরের যে আচরণটি দেখছেন এটি ঘটে কিনা তা পরীক্ষা করতে একই কর্নেল ব্যবহার করে পরীক্ষা চালিয়ে পরীক্ষা করে দেখতে পারা উচিত। যদি এটি হয় তবে 'উপলব্ধ' সেটিংটি 1 জিআইবি বর্তমানের সমান করতে পরিবর্তন করুন এবং পরীক্ষার পুনরাবৃত্তি করুন।

আমি এখানে বেশ কিছু শিক্ষিত অনুমান করছি এবং এই উত্তরটি নিয়ে কিছুটা রেখার মাঝখানে পড়ছি তবে আমি যা বলছি তা ইতিমধ্যে বর্ণিত তথ্যগুলির সাথে খাপ খায়।

আমি আমার হাইপোথিসিসটি পরীক্ষা করার এবং আমাদের সকলকে ফলাফলটি জানাতে পরামর্শ দিই।


4
এটি একটি সম্পূর্ণ (এবং ভাল ব্যাখ্যা) উত্তর!
অলিভিয়ার ডুলাক

2
হ্যাঁ, চমৎকার উত্তর ... উপায়ের লোকেরা যে মন্তব্যগুলির চেয়ে বেশি সহায়ক যে "ওপিকে কার্নেল বার্তাগুলিতে অন্ধভাবে বিশ্বাস করা উচিত" কেন উপলব্ধ নেই যে স্বাপের স্থানটি কেন ব্যবহার হচ্ছে না তা ব্যাখ্যা করার কোনও চেষ্টা ছাড়াই।
মাইকেল মার্টিনেজ

31

আপনার শিরোনাম প্রশ্নের উত্তর দিতে, oom_score_adj(কার্নেল> = 2.6.36) ব্যবহার করুন বা পূর্ববর্তী কার্নেলগুলির জন্য (> = 2.6.11) oom_adj, man proc দেখুন

/ proc / [pid] / oom_score_adj (যেহেতু লিনাক্স ২.6.৩6) কোন ফাইলটি স্মৃতি-বহির্ভূত অবস্থায় মারা যায় তা নির্বাচন করার জন্য এই ফাইলটি ব্যাভিচারী হিউরিস্টিক সমন্বয় করতে ব্যবহার করা যেতে পারে ...

/ proc / [pid] / oom_adj (যেহেতু লিনাক্স ২..1.১১) এই ফাইলটি স্মৃতি বহির্ভূত পরিস্থিতিতে (ওওএম) কোন প্রক্রিয়াকে হত্যা করা উচিত তা নির্বাচন করতে স্কোর সামঞ্জস্য করতে ব্যবহার করা যেতে পারে ...

পড়ার মতো আরও অনেক কিছুই রয়েছে তবে oom_score_adj -1000 বা oom_adj--17 এ সেট করা আপনার যা চান তা অর্জন করতে চলেছে।

ঝামেলা হ'ল অন্য কিছু মারা যাবে। সম্ভবত OOM কেন আমন্ত্রণ করা হচ্ছে তা নির্ধারণ করা এবং এটি মোকাবেলা করা আরও ভাল।


4
"অন্তর্নিহিত সমস্যা সমাধান করুন" এর জন্য +1। সফটওয়্যারটির আপত্তিকর অংশটি (বা অন্য কিছু) সবেমাত্র একটি বড় অংশকে ম্যালোক করার চেষ্টা করেছে? এটি আরও মেমরির জন্য অনুরোধ , যেগুলি রেড-অ্যালার্ট অঞ্চলে জিনিস আনতে চলেছে, যা OOM হত্যাকারীকে ট্রিগার করে।
ম্যাডহ্যাটার মনিকা

11
@ কোডার: লিনাক্স কার্নেল প্রোগ্রামারস এবং লিনাক্স কার্নেল পরিষ্কারভাবে আপনার চেয়ে বেশি জানেন। আপনার প্রক্রিয়াটি হত্যা করা হয়েছিল কারণ (আপনার প্রতিবাদ সত্ত্বেও) পর্যাপ্ত স্মৃতি ছিল না। আপনি যদি এটি ভুল বলে মনে করেন তবে একটি বাগ রিপোর্ট ফাইল করুন । আপনি যদি স্পষ্টভাবে জ্ঞানবান লোকদের কী বলতে চান তা যদি না শুনতে যাচ্ছেন তবে সম্ভবত আপনার সমর্থনটির জন্য অর্থ প্রদান করা উচিত কারণ আপনি এটির জন্য যা মূল্য দিয়েছেন তার পরামর্শ মূল্যবান। পরামর্শটি আলাদা হবে না তবে আপনি এর জন্য অর্থ প্রদান করেছেন তাই এটি আরও মূল্যবান হবে।
ব্যবহারকারী 9517 10:52 এ GoFundMonica

4
@ কোডার আমি কোনও প্রোগ্রামার নই, দুঃখের সাথে। এটি কেবল দুটি সম্ভাবনার মধ্যে ধরা পড়ে: কার্নেলটি ভিএম কীভাবে ব্যবহার করতে হয় তা জানে না এবং কোনও প্রোগ্রামার একটি ত্রুটি করেছে, আমি জানি আমার অর্থের উপরেরটি কী।
ম্যাডহ্যাটার মনিকা

1
@ কোডার আমি 'কেউ'। কীভাবে যোগাযোগ করতে হয় তা আমাকে জানতে দিন।
ম্যাথু ইফে

1
@ ম্যাডহ্যাটারটি লিনাক্স সিস্টেমের সংখ্যা চালিয়ে যাওয়া থেকে আপনাকে বলতে পারি: মেমরি পরিচালনা বা কার্নেলের কোনও অংশেই সমস্যা নেই বলে ধরে নেওয়া যায় না one এটি একটি উচ্চ-গ্রেডের ইউনিক্স প্ল্যাটফর্মের মতো নয় এবং যখন সবকিছু সাধারণত ঠিকঠাকভাবে কাজ করে তবে কোনও পক্ষেই কোনও পক্ষপাতিত্বমূলকভাবে গ্রহণ করা বুদ্ধিমানের কাজ নয়
ফ্লোরিয়ান হেইগল

12

বেশ কয়েকটি চিন্তা (উপরে আমার মন্তব্যগুলি থেকে), এবং ইন্টারেস্টের লিঙ্কগুলি আপনার পরিস্থিতি সম্পর্কে পড়ে:

  • আমি প্রস্তাব দিচ্ছি যে আপনি এটি পরীক্ষা করে দেখুন যে 1) আপনি আপনার বর্তমান কার্নেল ও কনফিগার (& সিপিইউ) দিয়ে 3 জি বি এর চেয়ে বেশি অ্যাড্রেস করতে পারেন [কারণ 3 জিবি যদি আপনার সিস্টেম ও ওএসের সীমা থাকে তবে আপনি এটি অতিক্রম করছেন]। 2) যা আপনি অদলবদলের অনুমতি দিন এবং অদলবদলের সাবসিস্টেমটি স্থানে এবং কাজ করছে। শুভকামনা (এটি আপনার সেটিংস এবং নির্দিষ্টকরণের উপর নির্ভর করে কীভাবে আমি তা ব্যাখ্যা করব না Search সার্চ ইঞ্জিনগুলি সহায়তা করবে)। এবং আপনি কোনও কার্নেল টেবিল (পিডসের এনবি? বা অন্য কিছু) উপচে পড়ছেন না (কিছু সম্ভবত কার্নেল সংকলনের সময় সেট করা যেতে পারে)।

  • পুরো জিনিসটি (হার্ডওয়্যার, বা ভিএম এর সিমুলেটেড হার্ডওয়্যার ইত্যাদি) 64 বিট কিনা তা পরীক্ষা করে দেখুন। (উদাহরণস্বরূপ দেখুন: https://askubuntu.com/questions/313379/i-installed-a-64-bit-os-in-a-32-bit-processor/313381 )। সিপিইউ এবং হোস্ট ওএস এবং ভিএম সাবসিস্টেম এবং ভিএম ওএস সবই 64৪-বিট সক্ষম হওয়া উচিত, অন্যথায় আপনার কাছে আসল -৪-বিট ভিএম নেই

  • কিছু ভাল পড়া:

  • এবং পরিশেষে: http://www.oracle.com/technetwork/articles/servers-storage-dev/oom-killer-1911807.html ওম কিলার দ্বারা আপনার প্রক্রিয়াটিকে লক্ষ্যবস্তু হতে বাধা দেওয়ার একটি উপায় দেখায়! ( echo -17 > /proc/PROCESSPID/oom_adj)। পরিবর্তনের ঝুঁকি হতে পারে, এবং এটি একটি খারাপ জিনিস হতে পারে (সিস্টেমটি এখন মূল অপরাধীকে হত্যা করতে পারে না বলে অন্য ধরণের ব্যর্থতার কারণ হতে পারে ...) সতর্কতার সাথে ব্যবহার করুন। @ আইইন নোট করুন যে "oom_adj" পুরানো কার্নেলের জন্য, এবং নতুনগুলিতে "oom_score_adj" দ্বারা প্রতিস্থাপন করা উচিত। ধন্যবাদ, আয়েন)


1
oom_adj শুধুমাত্র পুরানো কার্নেলগুলির জন্য বৈধ, নতুনরা oom_score_adj ব্যবহার করে।
ব্যবহারকারী 9517 12F6 এ GoFundMonica

অস্বীকৃতি: আমি উপরের কয়েকটি লিঙ্কের চেয়ে বেশি বিশদযুক্ত ইনফস দিতে পারি না, কারণ আমি এই মুহুর্তে একটি লিনাক্স সিস্টেমে অ্যাক্সেস করতে পারি না ... এবং চেক করার মতো অনেক কিছুই রয়েছে। হতে পারে যে কেউ পদক্ষেপ নেবেন এবং ধাপে ধাপে প্রক্রিয়াটি সুন্দর ধাপে সরবরাহ করবেন ... (সার্ভারফল্ট উত্তর, আমার উত্তরের "ভাল পাঠ্য" লিঙ্কটির শেষটি ছিল এরকম, এবং অবিশ্বাস্য একটি পড়া read)
অলিভিয়ার ডুলাক

6

oom_score_adjপ্রশ্নে প্রক্রিয়া বৃদ্ধির জন্য উল্লেখ করা হয়েছে (যা সম্ভবত খুব বেশি সাহায্য করবে না - এটি কম সম্ভাবনা তৈরি করে যে প্রক্রিয়াটি প্রথম হত্যা করা হবে, তবে এটি কেবল মেমরি নিবিড় প্রক্রিয়া সিস্টেম সম্ভবত শেষ পর্যন্ত অবধি পুনরুদ্ধার করবে না নিহত), এখানে টুইট করার জন্য কয়েকটি ধারণা রয়েছে:

  • যদি আপনি সেট করেন vm.overcommit_memory=2, তবে vm.overcommit_ratioসম্ভবত 90 এ টুইট করুন (বিকল্পভাবে, সেট করুন vm.overcommit_memory=0- কার্নেল ওভারকমিট ডক্স দেখুন )
  • vm.min_free_kbytesকিছুটা শারীরিক র‌্যামকে সর্বদা মুক্ত রাখার জন্য বৃদ্ধি করুন এবং এভাবে ওওএমকে কিছু মারার প্রয়োজনের সম্ভাবনা হ্রাস করুন (তবে এটি তাত্ক্ষণিকভাবে ওওএম যেমন হবে তেমনি এটি অতিরিক্ত করবেন না)।
  • vm.swappiness100 এ বৃদ্ধি করুন ( কার্নেলের আরও সহজেই অদলবদল করতে )

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


3

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

বিকল্পভাবে (এবং আরও অনেকগুলি বিষয়) বেশ কয়েকটি মন্তব্য যেমন পরামর্শ দেয়, তত বেশি র্যাম কিনে।


0

ছোট গল্প - একটি আলাদা কার্নেল সংস্করণ চেষ্টা করুন। আমার একটি সিস্টেম রয়েছে যা 4.2.0-x এবং 4.4.0-x কার্নেল দিয়ে OOM ত্রুটি দেখিয়েছে, তবে 3.19.0-x দিয়ে নয় with

দীর্ঘ গল্প: (খুব বেশি দীর্ঘ নয়!) আমি এখানে একটি কমপ্যাক ডিসি 5000 পেয়েছি - বর্তমানে 512 এমবি র‌্যাম রয়েছে (এবং এর কিছু অংশ, 32-128 এমবি এর মতো, জাহাজের ভিডিওতে দেওয়া হচ্ছে ..) বেশিরভাগ ক্ষেত্রেই পরিবেশন করা হচ্ছে এনএফএস, আমার কাছে একটি মনিটর রয়েছে যাতে মাঝে মাঝে আমি এটিতে লগইন করব (উবুন্টু ক্লাসিক, কোনও ইউনিটি নেই))

উবুন্টু এইচডব্লিউই এর মাধ্যমে আমি খুব ভাল সময়ের জন্য 3.19.x কার্নেলটি চালিয়ে যাচ্ছিলাম; এটি 200-300 এমবি স্টাফের মতো অদলবদল করে শেষ করবে, তবে দৃশ্যত এটি অব্যবহৃত স্টাফ ছিল, এটির কোনও অদলবদলের কোনও ক্রিয়াকলাপ হবে না যতক্ষণ না আমি বলতে পারব sw

৪.২.০-এক্স কার্নেল এবং এখন ৪.৪.০-এক্স কার্নেল, আমি এটিতে একটি চঞ্চল এনএফএস লিখতে শুরু করতে পারি, মাত্র ২২০ মেগাবাইট অদলবদরে (অর্থাত্ 1.3 গিগাবাইট মুক্ত), এবং এটি ওওএম মারতে শুরু করবে start আমি দাবি করব না এটি কার্নেল বাগ বা "টিউনিং ইস্যু" কিনা (64৪ এমবি রিজার্ভের মতো যা সাধারণত ভাল, তবে M 400 এমবি বা এত বেশি সিস্টেমের তুলনায় খুব বেশি?)

যারা অদলবদল ব্যবহার করবেন বলে প্রত্যাশা করছেন কেবল তাদের এটিকে কোনওভাবে ভেঙে দেওয়া হচ্ছে না; সমস্ত যথাযথ সম্মানের সাথে আপনি ভুল। এটি দ্রুত হবে না, তবে আমি কয়েকটি 512 এমবি -1 জিবি সিস্টেমে 1 বা 2 জিবি অদলবদীতে যেতে চাইতাম। অবশ্যই কিছু ধরণের সফ্টওয়্যার মলকের একগুচ্ছ র্যাম তবে আমার ক্ষেত্রে (যেহেতু আমি একই সফটওয়্যারটি কেবল একটি অন্য কার্নেলের সাথে চালাচ্ছি) এটি স্পষ্টভাবে নয়।

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