2010年1月15日金曜日

(FreeBSD) panic: kmem_malloc(131072): kmem_map too small: 1287303168 total allocated

先週の



(FreeBSD) panic kmem_malloc(131072) : kmem_map too small 1278058496 total allocated



のつづき。



現時点までで、



FreeBSD 8-STABLE + amd64 + 4GB + ZFS + NFSサーバ = panic kmem_map too small



なんじゃないか?というところまでブレークダウンできた。





発生する障害


  • NFSクライアントが、ZFSなとこをNFSマウントして、rsyncでファイルをがしがしと書き込んでると、しばらくして、NFSサーバーがkernel panicを起こす

実験環境の概要



NFSサーバー



  • FreeBSD 8-STABLE (昨日2010年1月13日ころの)


  • amd64版


  • CPU: AMD Athlon(tm) II X4 605e Processor (2310.14-MHz K8-class CPU)


  • RAMは4GB


  • HDDは、1.5TBが5発 (zpoolには4発だけ使ってる)


  • ZFSを使ってる


  • AHCI to CAM (っていうの?)を使ってる。/dev/ada0とか


  • ZFSなところを、exportしてやってる


  • なんとなくBIOSをupdateしてみた


NFSクライアント



  • FreeBSD 7.2-STABLE (去年の秋ころかな)


  • i386版


今回、はじめて、kernel crash dumpがとれました。とれたてのピチピチ[E:happy01]
これまでは、Dumping って表示されたあとフリーズしたり、勝手リブートしたりしてた。



/var/crash/core.txt.0って、いろいろ書き出されているなぁ。



panic: kmem_malloc(131072): kmem_map too small: 1287303168 total allocated



GNU gdb 6.1.1 [FreeBSD]
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "amd64-marcel-freebsd"...



Unread portion of the kernel message buffer:
panic: kmem_malloc(131072): kmem_map too small: 1287303168 total allocated
cpuid = 1
Uptime: 28m15s
panic: kmem_malloc(90112): kmem_map too small: 1287303168 total allocated
cpuid = 1
Physical memory: 3830 MB
Dumping 2558 MB: 2543 2527 2511 2495 2479 2463 2447 2431 2415 2399 2383 2367 2351 2335 2319 2303 2287 2271 2255 2239 2223 2207 2191 2175 2159 2143 2127 2111 2095 2079 2063 2047 2031 2015 1999 1983 1967 1951 1935 1919 1903 1887 1871 1855 1839 1823 1807 1791 1775 1759 1743 1727 1711 1695 1679 1663 1647 1631 1615 1599 1583 1567 1551 1535 1519 1503 1487 1471 1455 1439 1423 1407 1391 1375 1359 1343 1327 1311 1295 1279 1263 1247 1231 1215 1199 1183 1167 1151 1135 1119 1103 1087 1071 1055 1039 1023 1007 991 975 959 943 927 911 895 879 863 847 831 815 799 783 767 751 735 719 703 687 671 655 639 623 607 591 575 559 543 527 511 495 479 463 447 431 415 399 383 367 351 335 319 303 287 271 255 239 223 207 191 175 159 143 127 111 95 79 63 47 31 15



Reading symbols from /boot/kernel/snd_hda.ko...Reading symbols from /boot/kernel/snd_hda.ko.symbols...done.
~略~
#0  doadump () at pcpu.h:223
223    pcpu.h: No such file or directory.
    in pcpu.h
(kgdb) #0  doadump () at pcpu.h:223
#1  0xffffffff8031bf99 in boot (howto=260)
    at /usr/src/sys/kern/kern_shutdown.c:416
#2  0xffffffff8031c3cc in panic (
    fmt=0xffffffff805f5678 "kmem_malloc(%ld): kmem_map too small: %ld total allocated") at /usr/src/sys/kern/kern_shutdown.c:579
#3  0xffffffff8052f6be in kmem_malloc (map=0xffffff00010000e8, size=131072,
    flags=2) at /usr/src/sys/vm/vm_kern.c:305
#4  0xffffffff805275fa in uma_large_malloc (size=131072, wait=2)
    at /usr/src/sys/vm/uma_core.c:3003
#5  0xffffffff8030a327 in malloc (size=131072, mtp=0xffffffff80d02620,
    flags=2) at /usr/src/sys/kern/kern_malloc.c:391
#6  0xffffffff80c39279 in arc_get_data_buf (buf=0xffffff007e38d120)
    at /usr/src/sys/modules/zfs/../../cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c:2179
#7  0xffffffff80c3967e in arc_buf_alloc (spa=0xffffff0003e47000, size=131072,
    tag=Variable "tag" is not available.
)
    at /usr/src/sys/modules/zfs/../../cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c:1156
#8  0xffffffff80c3f27a in dbuf_hold_impl (dn=0xffffff0008543610, level=Variable "level" is not available.
)
    at /usr/src/sys/modules/zfs/../../cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c:1660
#9  0xffffffff80c401eb in dbuf_hold (dn=Variable "dn" is not available.
)
    at /usr/src/sys/modules/zfs/../../cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c:1689
#10 0xffffffff80c425be in dmu_buf_hold_array_by_dnode (dn=0xffffff0008543610,
    offset=Variable "offset" is not available.
)
    at /usr/src/sys/modules/zfs/../../cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c:223
#11 0xffffffff80c42900 in dmu_read (os=Variable "os" is not available.
)
    at /usr/src/sys/modules/zfs/../../cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c:569
#12 0xffffffff80ca1561 in zfs_get_data (arg=0xffffff00084bc000,
    lr=0xffffff804d1530c0,
    buf=0xffffff804d153180 "なんかのバイナリデータっぽいもの"..., zio=0xffffff002f59a5a0)
    at /usr/src/sys/modules/zfs/../../cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c:991
#13 0xffffffff80c84922 in zil_commit (zilog=0xffffff000856d600, seq=975366,
    foid=0)
    at /usr/src/sys/modules/zfs/../../cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c:970
#14 0xffffffff80c9ae56 in zfs_sync (vfsp=Variable "vfsp" is not available.
)
    at /usr/src/sys/modules/zfs/../../cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c:151
#15 0xffffffff803a7964 in sync_fsync (ap=Variable "ap" is not available.
)
    at /usr/src/sys/kern/vfs_subr.c:3453
#16 0xffffffff803a840b in sync_vnode (slp=0xffffff0003d703d8,
    bo=0xffffff8070455bf0, td=0xffffff0003d5b740) at vnode_if.h:549
#17 0xffffffff803a8719 in sched_sync () at /usr/src/sys/kern/vfs_subr.c:1807
#18 0xffffffff802f3ef8 in fork_exit (callout=0xffffffff803a8550 <sched_sync>,
    arg=0x0, frame=0xffffff8070455c80) at /usr/src/sys/kern/kern_fork.c:843
#19 0xffffffff8054c41e in fork_trampoline ()
    at /usr/src/sys/amd64/amd64/exception.S:561
#20 0x0000000000000000 in ?? ()
#21 0x0000000000000000 in ?? ()
#22 0x0000000000000001 in ?? ()
#23 0x0000000000000000 in ?? ()
#24 0x0000000000000000 in ?? ()
#25 0x0000000000000000 in ?? ()
#26 0x0000000000000000 in ?? ()
#27 0x0000000000000000 in ?? ()
#28 0x0000000000000000 in ?? ()
#29 0x0000000000000000 in ?? ()
#30 0x0000000000000000 in ?? ()
#31 0x0000000000000000 in ?? ()
#32 0x0000000000000000 in ?? ()
#33 0x0000000000000000 in ?? ()
#34 0x0000000000000000 in ?? ()
#35 0x0000000000000000 in ?? ()
#36 0x0000000000000000 in ?? ()
#37 0x0000000000000000 in ?? ()
#38 0x0000000000000000 in ?? ()
#39 0x0000000000000000 in ?? ()
#40 0x0000000000000000 in ?? ()
#41 0x0000000000000000 in ?? ()
#42 0x0000000000000000 in ?? ()
#43 0x0000000000000000 in ?? ()
#44 0x0000000000a01000 in ?? ()
#45 0x0000000000000000 in ?? ()
#46 0x000000000000000b in ?? ()
#47 0xffffffff807ab240 in affinity ()
#48 0xffffff0003d5b740 in ?? ()
#49 0xffffff8070454c90 in ?? ()
#50 0xffffff8070454c48 in ?? ()
#51 0xffffff00015883a0 in ?? ()
#52 0xffffffff8033f988 in sched_switch (td=0xffffffff803a8550, newtd=0x0,
    flags=Variable "flags" is not available.
) at /usr/src/sys/kern/sched_ule.c:1859
Previous frame inner to this frame (corrupt stack?)
(kgdb)



えーん、よくわかんないです。[E:crying]



sysctlで見ると、こんな感じになってます。



vm.kmem_size_scale: 3
vm.kmem_size_max: 329853485875
vm.kmem_size_min: 0
vm.kmem_size: 1291354112



単純に、kmem_sizeが1291354112では足りていません! てことでしょうか???
明日、増やして試してみるか。







一応、問題の切り分けを試みてもいます。



(1) NFS使わずに、ZFSに大量に読んだり書いたり



  • ぜんぜん大丈夫。ところで、空き容量が少なくなってくると、書き込みが遅くなる気がしたんだけど、気のせいかな。


(2) ZFSじゃなくて、UFSなところをexportして、そこへ書き込んだ場合



  • 大丈夫そう。ただし、先週cvsupしたカーネルでは、よくわかんないkernel panicが出た。昨日cvsupしたのでは大丈夫だった。




0 件のコメント:

コメントを投稿