Здравейте,
От няколко месеца, профилактично, въпросното FreeBSD се рестартира, без видима причина, напълно рандом. Пуснато е на VMWare център. Ето какво има в лога (vmcore):
GeSHi (Bash):
Fatal trap 12: page fault while in kernel mode
cpuid = 1; apic id = 01
fault virtual address = 0x18
fault code = supervisor write, page not present
instruction pointer = 0x20:0xc0839301
stack pointer = 0x28:0xe6992be8
frame pointer = 0x28:0xe6992c58
code segment = base 0x0, limit 0xfffff, type 0x1b
= DPL 0, pres 1, def32 1, gran 1
processor eflags = interrupt enabled, resume, IOPL = 0
current process = 32 (dummynet)
trap number = 12
panic: page fault
cpuid = 1
Uptime: 22d0h37m29s
Physical memory: 3059 MB
Dumping 260 MB: 245 229 213 197 181 165 149 133 117 101 85 69 53 37 21 5
#0 doadump () at pcpu.h:195
195 __asm __volatile("movl %%fs:0,%0" : "=r" (td));
Следвам това ($2) ръководство и стигнах до:
GeSHi (Bash):
(kgdb) list *0xc0839301
0xc0839301 is in ready_event_wfq (../../../netinet/ip_dummynet.c:700).
695 if (p->if_name[0]==0 && p->numbytes < 0) { /* this implies bandwidth >0 */
696 dn_key t=0 ; /* number of ticks i have to wait */
697
698 if (p->bandwidth > 0)
699 t = ( p->bandwidth -1 - p->numbytes) / p->bandwidth ;
700 dn_tag_get(p->tail)->output_time += t ;
701 p->sched_time = curr_time ;
702 heap_insert(&wfq_ready_heap, curr_time + t, (void *)p);
703 /* XXX should check errors on heap_insert, and drain the whole
704 * queue on error hoping next time we are luckier.
(kgdb) backtrace
#0 doadump () at pcpu.h:195
#1 0xc0755537 in boot (howto=260) at ../../../kern/kern_shutdown.c:409
#2 0xc07557f9 in panic (fmt=Variable "fmt" is not available.
) at ../../../kern/kern_shutdown.c:563
#3 0xc0a63d6c in trap_fatal (frame=0xe6992ba8, eva=24) at ../../../i386/i386/trap.c:899
#4 0xc0a63ff0 in trap_pfault (frame=0xe6992ba8, usermode=0, eva=24) at ../../../i386/i386/trap.c:812
#5 0xc0a6499c in trap (frame=0xe6992ba8) at ../../../i386/i386/trap.c:490
#6 0xc0a4a91b in calltrap () at ../../../i386/i386/exception.s:139
#7 0xc0839301 in ready_event_wfq (p=0xc6443e00, head=0xe6992c8c, tail=0xe6992c88)
at ../../../netinet/ip_dummynet.c:700
#8 0xc083a965 in dummynet_task (context=0x0, pending=1) at ../../../netinet/ip_dummynet.c:799
#9 0xc0784fb5 in taskqueue_run (queue=0xc6591d80) at ../../../kern/subr_taskqueue.c:255
#10 0xc07851bb in taskqueue_thread_loop (arg=0xc0c02990) at ../../../kern/subr_taskqueue.c:374
#11 0xc0735559 in fork_exit (callout=0xc0785100 <taskqueue_thread_loop>, arg=0xc0c02990,
frame=0xe6992d38) at ../../../kern/kern_fork.c:781
#12 0xc0a4a990 in fork_trampoline () at ../../../i386/i386/exception.s:205
(kgdb)
Рових малко в google и стигнах до няколко подобни проблеми, като всичко там води към натрупване на грешки по интерфейса. Като проверя моите, излиза следното:
GeSHi (Bash):
netstat -i -b -n -I le3
Name Mtu Network Address Ipkts Ierrs Ibytes Opkts Oerrs Obytes Coll
le3 1500 <Link#4> 00:*:56:*:65:* 13041589 522 2744708145 8512484 0 845707843 0
le3 1500 95.*.128.* 95.*.128.* 1519887 - 884665643 8512371 - 726528457 -
GeSHi (Bash):
netstat -i -b -n -I le1
Name Mtu Network Address Ipkts Ierrs Ibytes Opkts Oerrs Obytes Coll
le1 1500 <Link#2> 00:*:26:*:35:* 12998056 650 1843494915 17158552 0 3861703475 0
le1 1500 192.168.1.0/ 192.168.1.1 795085 - 97119029 971136 - 716719789 -
Следва проверка с:
sysctl -a | grep dev.le , но тук ми излизат само:
GeSHi (Bash):
dev.le.1.%desc: AMD PCnet-PCI
dev.le.1.%driver: le
dev.le.1.%location: slot=18 function=0
dev.le.1.%pnpinfo: vendor=0x1022 device=0x2000 subvendor=0x1022 subdevice=0x2000 class=0x020000
dev.le.1.%parent: pci0
което явно е в следствие липсата на DEBUG режим зададен в кърнела?В примерите (тук ($2) и тук ($2) които гледам, има редовете със
stats.rxПример:
GeSHi (Bash):
dev.bge.0.stats.rx.FCSErrors: 0
dev.bge.0.stats.rx.AlignmentErrors: 0
dev.bge.0.stats.rx.xonPauseFramesReceived: 0
dev.bge.0.stats.rx.xoffPauseFramesReceived: 0
dev.bge.0.stats.rx.ControlFramesReceived: 0
dev.bge.0.stats.rx.xoffStateEntered: 0
dev.bge.0.stats.rx.FramesTooLong: 799
Интересното е, че имам друго FreeBSD, пуснато на същия този виртуален ценър, има доволно много грешки:
GeSHi (Bash):
netstat -i -b -n -I le0
Name Mtu Network Address Ipkts Ierrs Ibytes Opkts Oerrs Obytes Coll
le0 1500 <Link#1> 00:*:56:*:51:* 408290228 27731 2348559573 180869579 0 1882814631 0
le0 1500 192.168.1.0/ 192.168.1.102 148512144 - 3975305044 166778260 - 2743899286 -
. но няма никакви проблеми с него и има почти две години ъптайм.
Като цяло питането ми е, правилно ли съм се насочил (активиране на DEBUG и прекомпилиране) или да търся нещо друго?
netstat -m
sysctl kern.ipc.nmbclusters
7 е EOL преди 6 години, защо не ъпгрейднеш до 9.1?
не разбирам особено руски но виж и http://www.opennet.ru/base/sys/freebsd_panic_solution.txt.html
все пак ъпгрейд...
GeSHi (Bash):
#netstat -m
36/1884/1920 mbufs in use (current/cache/total)
13/1567/1580/25600 mbuf clusters in use (current/cache/total/max)
0/512 mbuf+clusters out of packet secondary zone in use (current/cache)
0/119/119/12800 4k (page size) jumbo clusters in use (current/cache/total/max)
0/0/0/6400 9k jumbo clusters in use (current/cache/total/max)
0/0/0/3200 16k jumbo clusters in use (current/cache/total/max)
35K/4081K/4116K bytes allocated to network (current/cache/total)
0/0/0 requests for mbufs denied (mbufs/clusters/mbuf+clusters)
0/0/0 requests for jumbo clusters denied (4k/9k/16k)
0/73/6656 sfbufs in use (current/peak/max)
0 requests for sfbufs denied
0 requests for sfbufs delayed
7 requests for I/O initiated by sendfile
0 calls to protocol drain routines
# sysctl kern.ipc.nmbclusters
kern.ipc.nmbclusters: 25600
За ъпгрейд и аз се замислям, но има някой неща които ме притеснява да не се счупят.
EDIT:Тъй като
35K/4081K/4116K bytes allocated to network (current/cache/total) ми грабна окото и почнах пак да ровя, попаднах на няколко интересни неща. Едното е
(FIXED) Network mbuf Leak / Exhaustion in FreeBSD 9.0 / 9.1 ($2)
Хардуеъра пак е DELL и пак става дума за VMWare. Питането ми е, как точно да приложа този пач, за да не омажа нещо и изобщо подходящ ли е за мен, след като там се прилага на 9.0 , а аз съм с 7.0
Другото интересно е изхода от командата:
GeSHi (Bash):
netstat -i -w 1
input (Total) output
packets errs bytes packets errs bytes colls
2167 0 1379324 2385 0 2006399 0
1759 0 1219967 1975 0 1820319 0
1762 0 1173325 1975 0 1771865 0
3973 0 2048293 4367 0 3164761 0
4797 0 1846254 5030 0 2543221 0
3504 0 1458508 3705 0 2054196 0
2115 0 1554739 2216 0 1894367 0
2212 1 1484002 2533 0 2392537 0
9573 5 7839601 12353 0 14573350 0
9594 5 8082062 12598 0 15286981 0
9560 6 8077210 12497 0 15133796 0
9904 7 8153599 12835 0 15304480 0
11425 7 9625388 14974 0 18238077 0
11353 9 9481029 14816 0 17864126 0
12814 4 10335644 16579 0 19374355 0
9452 7 7778154 12246 0 14551521 0
11317 8 9533213 14887 0 18043389 0
7649 3 6345857 9931 0 11812625 0
9019 2 6945061 11518 0 12721038 0
6832 1 4976888 8380 0 8712343 0
12726 12 10850582 15599 0 17323673 0
Тези грешки на входа трябва ли да ме притесняват?
Направи нова виртуална машина и мигрирай каквото ти трябва. Вода и от десет кладенеца да носиш не означава, че някой не се е изпикал в тях.