かなりと申します。
常時接続でADSLルータ兼パケットフィルタとして
使っているマシンがあるのですが、swap_duplicateが
発生して電源を再投入せざるを得なくなりました。
症状としては、cronがスクリプトを実行した際に
swap_duplicateが発生し、その後はcronも実行されず
telnetで入ることもできなくなりました。
ただ、/var/log/messagesによるとエラーの発生した後も
8時間程度はipchainsが機能していました。稼働時間は
26日+4時間程度です。
googleやsearch.luky.orgでswap_duplicateを調べた
ものの、カーネルの話はお手上げでした。そこで質問
なのですが、このswap_duplicateについて
(1)考えられる原因
(2)予防策
について何かありませんでしょうか。
環境:
マシン:東芝DynaBook 620CT(Pentium 100MHz,メモリ40MB)
OS:Vine Linux 2.1.5
kernel:2.2.19-0vl0.23(再構築してあります)
/var/log/messagesの該当部分:
-----ここから-----
Mar 19 16:22:00 620ct kernel: swap_duplicate: entry 68247400, offset exceeds max
Mar 19 16:22:00 620ct kernel: VM: killing process adslcontinue.sh
Mar 19 16:22:00 620ct kernel: swap_free: offset exceeds max
Mar 19 16:22:00 620ct kernel: swap_free: Trying to free nonexistent swap-page
Mar 19 16:22:00 620ct last message repeated 3 times
Mar 19 16:22:00 620ct kernel: swap_free: offset exceeds max
Mar 19 16:22:00 620ct kernel: swap_free: Trying to free nonexistent swap-page
Mar 19 16:22:00 620ct kernel: swap_free: swap-space map bad (entry 003b6800)
Mar 19 16:22:00 620ct kernel: swap_free: Trying to free nonexistent swap-page
Mar 19 16:22:01 620ct last message repeated 2 times
Mar 19 16:22:04 620ct kernel: Unable to handle kernel NULL pointer dereference at virtual address 00000000
Mar 19 16:22:04 620ct kernel: current->tss.cr3 = 00101000, %%cr3 = 00101000
Mar 19 16:22:04 620ct kernel: *pde = 00000000
Mar 19 16:22:04 620ct kernel: Oops: 0002
Mar 19 16:22:04 620ct kernel: CPU: 0
Mar 19 16:22:04 620ct kernel: EIP: 0010:[sync_inodes+92/204]
Mar 19 16:22:04 620ct kernel: EFLAGS: 00010246
Mar 19 16:22:04 620ct kernel: eax: 00000000 ebx: 82478330 ecx: 82478338 edx: 827a543c
Mar 19 16:22:04 620ct kernel: esi: 827a543c edi: 827a5400 ebp: 00000000 esp: 827adfb8
Mar 19 16:22:04 620ct kernel: ds: 0018 es: 0018 ss: 0018
Mar 19 16:22:04 620ct kernel: Process kupdate (pid: 3, process nr: 3, stackpage=827ad000)
Mar 19 16:22:04 620ct kernel: Stack: 827ac1ce 0008e000 80129981 00000000 00000000 827ac000 801e784b 827ac1ce
Mar 19 16:22:04 620ct kernel: 0008e000 0008e000 80129e8c 00000f00 82829fb4 80106000 80108b33 00000000
Mar 19 16:22:04 620ct kernel: 00000f00 8024dfd8
Mar 19 16:22:04 620ct kernel: Call Trace: [sync_old_buffers+21/444] [tvecs+13515/15648] [kupdate+112/116] [get_options+0/116] [kernel_thread+35/48]
Mar 19 16:22:04 620ct kernel: Code: 89 10 a1 08 66 22 80 89 48 04 89 01 c7 41 04 08 66 22 80 89
-----ここまで-----
adslcontinue.shはcronで2分毎に実行させています。
adslの接続状況を調べてdownしていたらリブートを
かけるというものです。adslの接続にはppp-2.4.0-2vl0と
rp-pppoe-3.1-0vl0を利用しています。
-----ここから-----
#!/bin/sh
LANG=C
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/sbin:/etc/rc.d/init.d
DATE=`date +%Y-%m-%d`
LOG=/var/log/adsl_log/$DATE
FLAG=/var/log/adsl_log
echo "check adsl connection..."
if ( /etc/rc.d/init.d/adsl status | egrep "down" ) > /dev/null ;
then
echo "re-setting adsl..."
echo "`date` down" >> $LOG
sleep 1
if [ -f $FLAG/adsl1.flag ]; then
mv $FLAG/adsl1.flag $FLAG/adsl2.flag
exit
fi
if [ -f $FLAG/adsl2.flag ]; then
mv $FLAG/adsl2.flag $FLAG/adsl3.flag
exit
fi
if [ -f $FLAG/adsl3.flag ]; then
rm $FLAG/adsl3.flag
/sbin/shutdown -r now
exit
fi
touch $FLAG/adsl1.flag
exit
else
echo "adsl is ok"
echo "`date` ok" >> $LOG
exit
fi
-----ここまで-----
また、参考になるかは分かりませんが、swap_duplicateの
発生する2分前の、freeの実行結果です。
total used free shared buffers cached
Mem: 38852 36504 2348 17720 18300 7556
-/+ buffers/cache: 10648 28204
Swap: 84664 0 84664
未使用のHDDのswap領域を使用しようとしたものの、
HDDに不具合があってエラーを起こしたのかも、
と想像しているところです。
以上です。
----------------------------
"ka's" <ka-s _at_ penguin-box.jp>
Follow-Ups:
- [linux-users:91966] Re: swap_duplicateSatoshi I.Nozawa
- Prev by Subject: [linux-users:91951] linuxでMPPC
- Next by Subject: [linux-users:91953] emacsで「selectcoding system」のエラーが出ないようにしたいのですが
- Previous by thread: [linux-users:91951] linuxでMPPC
- Next by thread: [linux-users:91966] Re: swap_duplicate
- Indexes:[Main][Thread]