<div dir="ltr">На одном из серверов проблема сохраняется и повторяется достаточно часто:<div><br></div><div><div><br></div><div>[134118.883440] swapper: page allocation failure: order:1, mode:0x20</div><div>[134118.883446] Pid: 0, comm: swapper Not tainted 3.0.74-std-def-alt0.M60P.1 #1</div>

<div><br></div><div>[134277.223458] php5-fpm: page allocation failure: order:1, mode:0x20</div><div>[134277.223465] Pid: 3718, comm: php5-fpm Not tainted 3.0.74-std-def-alt0.M60P.1 #1</div><div><br></div><div>[135102.694001] swapper: page allocation failure: order:1, mode:0x20</div>

<div>[135102.694007] Pid: 0, comm: swapper Not tainted 3.0.74-std-def-alt0.M60P.1 #1</div><div><br></div><div>[135412.344250] swapper: page allocation failure: order:1, mode:0x20</div><div>[135412.344255] Pid: 0, comm: swapper Not tainted 3.0.74-std-def-alt0.M60P.1 #1</div>

<div><br></div><div>[135630.433746] swapper: page allocation failure: order:1, mode:0x20</div><div>[135630.433751] Pid: 0, comm: swapper Not tainted 3.0.74-std-def-alt0.M60P.1 #1</div><div><br></div><div>[135816.365417] smbd: page allocation failure: order:1, mode:0x20</div>

<div>[135816.365423] Pid: 1942, comm: smbd Not tainted 3.0.74-std-def-alt0.M60P.1 #1</div><div><br></div><div>[137965.370600] klogd: page allocation failure: order:1, mode:0x20</div><div>[137965.370605] Pid: 4029, comm: klogd Not tainted 3.0.74-std-def-alt0.M60P.1 #1</div>

<div><br></div><div>[137965.452384] php5-fpm: page allocation failure: order:1, mode:0x20</div><div>[137965.452391] Pid: 4935, comm: php5-fpm Not tainted 3.0.74-std-def-alt0.M60P.1 #1</div></div><div><br></div><div style>

В основном - ругается на swapper, но попадаются и другие процессы.</div><div style><br></div><div style><br></div><div style>SWAP на месте:</div><div style><br></div><div style><div># free -m</div><div>             total       used       free     shared    buffers     cached</div>

<div>Mem:          5983       5826        157          0          3       5457</div><div>-/+ buffers/cache:        365       5618</div><div>Swap:         1023         31        992</div><div><br></div></div><div><br></div>

<div style>Что это может быть? Битая память? Как отследить?</div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">5 апреля 2013 г., 19:45 пользователь Sergey Vlasov <span dir="ltr">&lt;<a href="mailto:vsu@altlinux.ru" target="_blank">vsu@altlinux.ru</a>&gt;</span> написал:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On Fri, 5 Apr 2013 12:57:31 +0400 Yuri Khachaturyan wrote:<br>
<br>
&gt; С недавнего времени в dmesg наблюдаю следующее (см. ниже).<br>
&gt; Кто подскажет что это может быть - железо? память?<br>
<br>
</div>Вечная проблема с фрагментацией памяти...<br>
<div class="im"><br>
&gt; [34302.846989] smtp: page allocation failure. order:1, mode:0x20<br>
<br>
</div>Запрашивается блок размером 2 страницы (order:1) с флагом GFP_ATOMIC<br>
(необходимо найти свободный блок немедленно - нельзя ожидать<br>
освобождения памяти).<br>
<div class="im"><br>
&gt; [34302.846996] Pid: 13462, comm: smtp Not tainted 2.6.39-std-def-alt3.2 #1<br>
&gt; [34302.846998] Call Trace:<br>
&gt; [34302.847001]  &lt;IRQ&gt;  [&lt;ffffffff810fa29f&gt;]<br>
&gt; __alloc_pages_nodemask+0x67f/0x8b0<br>
&gt; [34302.847019]  [&lt;ffffffff81136786&gt;] kmem_getpages+0x66/0x180<br>
&gt; [34302.847023]  [&lt;ffffffff811376cf&gt;] fallback_alloc+0x17f/0x240<br>
&gt; [34302.847026]  [&lt;ffffffff81137490&gt;] ____cache_alloc_node+0x90/0x150<br>
&gt; [34302.847030]  [&lt;ffffffff81137da3&gt;] kmem_cache_alloc+0xe3/0x170<br>
&gt; [34302.847035]  [&lt;ffffffff813465d3&gt;] sk_prot_alloc+0x43/0x180<br>
&gt; [34302.847038]  [&lt;ffffffff8134681b&gt;] sk_clone+0x1b/0x300<br>
&gt; [34302.847043]  [&lt;ffffffff81393cd1&gt;] inet_csk_clone+0x11/0xc0<br>
&gt; [34302.847047]  [&lt;ffffffff813ad0f4&gt;] tcp_create_openreq_child+0x24/0x4c0<br>
&gt; [34302.847051]  [&lt;ffffffff813ab528&gt;] tcp_v4_syn_recv_sock+0x48/0x270<br>
<br>
</div>Причина запроса - приём очередного TCP-соединения; параметры<br>
соответствующего slab cache можно увидеть в /proc/slabinfo:<br>
<br>
$ head -n2 /proc/slabinfo; grep -w TCP /proc/slabinfo<br>
slabinfo - version: 2.1<br>
# name            &lt;active_objs&gt; &lt;num_objs&gt; &lt;objsize&gt; &lt;objperslab&gt; &lt;pagesperslab&gt; : tunables &lt;limit&gt; &lt;batchcount&gt; &lt;sharedfactor&gt; : slabdata &lt;active_slabs&gt; &lt;num_slabs&gt; &lt;sharedavail&gt;<br>


TCP                   19     32   1664    4    2 : tunables   24   12    8 : slabdata      8      8      0<br>
<br>
(вообще на разных версиях ядра параметры могут несколько отличаться, но<br>
в попавшихся под руку тоже pagesperslab=2).<br>
<div class="im"><br>
&gt; [34302.847245] Node 0 DMA: 0*4kB 1*8kB 0*16kB 1*32kB 2*64kB 1*128kB 1*256kB 0*512kB 1*1024kB 1*2048kB 3*4096kB = 15912kB<br>
&gt; [34302.847256] Node 0 DMA32: 26048*4kB 22*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 104368kB<br>
&gt; [34302.847267] Node 0 Normal: 11246*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 1*2048kB 0*4096kB = 47032kB<br>
<br>
</div>Свободная память вроде бы и есть, но в основном в виде одиночных<br>
страниц, а найти непрерывный блок даже из 2 страниц существенно сложнее<br>
(вообще-то такие блоки есть, но часть памяти резервируется для совсем<br>
особых случаев, к которым не относится даже GFP_ATOMIC - например, для<br>
использования в процессе работы OOM killer, если для завершения процесса<br>
вдруг временно понадобится ещё немного памяти, или для процессов с<br>
установленным флагом PF_MEMALLOC, успешная работа которых должна<br>
привести к освобождению памяти).<br>
<br>
Реально работающих методов борьбы с этим безобразием, кроме подъёма<br>
/proc/sys/vm/min_free_kbytes, практически нет.  Хотя именно на выбор<br>
параметров slab cache в данном случае можно было бы повлиять параметром<br>
ядра slab_max_order=0 (ценой некоторого увеличения бесполезных потерь<br>
памяти).  Однако этот параметр доступен только начиная с ядра 3.3.<br>
<br>
Вообще calculate_slab_order() в данном случае ведёт себя не совсем<br>
оптимальным образом - на 1 страницу может влезть 2*1664, на 2 страницы -<br>
4*1664, поэтому никакого преимущества по использованию памяти при выборе<br>
order=1 получить не удастся.<br>
<div class="HOEnZb"><div class="h5">_______________________________________________<br>
Sysadmins mailing list<br>
<a href="mailto:Sysadmins@lists.altlinux.org">Sysadmins@lists.altlinux.org</a><br>
<a href="https://lists.altlinux.org/mailman/listinfo/sysadmins" target="_blank">https://lists.altlinux.org/mailman/listinfo/sysadmins</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>С уважением, <br>Хачатурян Юрий (<a href="mailto:yukh@yukh.ru">yukh@yukh.ru</a>)
</div>