티스토리 뷰
CentOS6.3 64bit 환경에서 서비스 운영 중 아래와 같은 로그가 확인 되어 구글링 해봤다.
서비스 데몬 : page allocation failure. order:4, mode:0x8020
kernel: Pid: 7036, comm: *** Not tainted 2.6.32-358.6.2.el6.x86_64 #1
kernel: Call Trace:
kernel: [<ffffffff8112c207>] ? __alloc_pages_nodemask+0x757/0x8d0
kernel: [<ffffffff81010ff6>] ? dma_generic_alloc_coherent+0xa6/0x160
kernel: [<ffffffff8103c8f1>] ? x86_swiotlb_alloc_coherent+0x31/0x70
kernel: [<ffffffffa002e74a>] ? pci_alloc_consistent+0x5a/0xc0 [mpt2sas]
kernel: [<ffffffffa0030155>] ? _ctl_do_mpt_command+0x7c5/0xcb0 [mpt2sas]
kernel: [<ffffffff8119abe7>] ? __d_lookup+0xa7/0x150
kernel: [<ffffffffa0030762>] ? _ctl_compat_mpt_command+0x122/0x160 [mpt2sas]
kernel: [<ffffffff8150f026>] ? mutex_lock_interruptible+0x16/0x50
kernel: [<ffffffffa003167b>] ? _ctl_ioctl_main+0x5cb/0x1070 [mpt2sas]
kernel: [<ffffffff81193010>] ? do_filp_open+0x7d0/0xdd0
kernel: [<ffffffff8104757c>] ? __do_page_fault+0x1ec/0x480
kernel: [<ffffffffa0032133>] ? _ctl_ioctl_compat+0x13/0x20 [mpt2sas]
kernel: [<ffffffff811d6bbd>] ? compat_sys_ioctl+0xed/0x510
kernel: [<ffffffff8104dc73>] ? ia32_sysret+0x0/0x5 |
page allocation error는 RHEL6.4/CentOS6.4이하에 많이 발견되는 버그라고 한다...
(swapper가 아닌 일반 프로세스에서도 page allocation error 발생)
해결 방안
page allocation failure 메시지를 제거하는 2가지 방법 이다.
1. THP 비활성화
별도의 바이너리 패치 작업 없이 Disable설정 후 리부팅만 진행하면된다. 리부팅을 안해도 되는 경우도 있지만 이미 AnonHugePages가 많이 사용되고 있는 시스템(cat /proc/meminfo로 확인하자)에서는 리부팅을 해야 효과가 있다.
/sys 파일 시스템 설정으로 비활성화
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
위 방법은 리부팅 후에도 적용해줘야 하기 때문에 보통 /etc/rc.d/rc.local파일에 아래와 같이 추가 입력한다.
# Disable THP
if [[ -f "/sys/kernel/mm/transparent_hugepage/enabled" ]]; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if [[ -f "/sys/kernel/mm/transparent_hugepage/defrag" ]]; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
커널 파라미터 비활성화
grub.conf파일을 수정하여 비활성화 할 수 있다.
transparent_hugepage=never
2. RHEL6.5/CentOS6.5 커널로 패치
커널 패치는 REHL6/CentOS6.5릴리즈 기준 커널인 2.6.32-431.el6이상으로 설치하면 된다.
yum install kernel
[출처]http://blog.rubi.kr/swapper-page-allocation-failure-swapper-not-tainted/
'Linux(CentOS) > * log' 카테고리의 다른 글
nf_conntrack: table full, dropping packet. (0) | 2016.01.27 |
---|---|
kernel: CPU*: Temperature above threshold, cpu clock throttled (total events = *) (0) | 2016.01.12 |
possible SYN flooding on port 80. Sending cookies. (0) | 2016.01.01 |
child pid **** exit signal File size limit exceeded (25) (0) | 2015.12.31 |
ext3_dx_add_entry:Director index Full (2) | 2015.12.31 |