Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 09 Jul 1999 20:33:23 +1000
From:      Stephen McKay <syssgm@detir.qld.gov.au>
To:        Matthew Dillon <dillon@apollo.backplane.com>
Cc:        freebsd-current@freebsd.org, syssgm@detir.qld.gov.au
Subject:   Re: Stuck in "objtrm" - live kernel test to run 
Message-ID:  <199907091033.UAA03176@nymph.detir.qld.gov.au>
In-Reply-To: <199907081828.LAA41802@apollo.backplane.com> from Matthew Dillon at "Thu, 08 Jul 1999 11:28:10 -0700"
References:  <199907081828.LAA41802@apollo.backplane.com>

next in thread | previous in thread | raw e-mail | index | archive | help

On Thursday, 8th July 1999, Matthew Dillon wrote:

>    There is a way we can find out for sure.  For any of you with processes
>    stuck in objtrm, see if you can gdb the kernel and get a backtrace
>    of that process to see if it might be in a state where a previous
>    call context is holding a PIP count on the object.

Just for completeness, here's mine again, done with your ps trick:

(kgdb) back
#0  mi_switch () at ../../kern/kern_synch.c:827
#1  0xc014a5bd in tsleep (ident=0xc32ea21c, priority=4, 
    wmesg=0xc023db84 "objtrm", timo=0) at ../../kern/kern_synch.c:443
#2  0xc01e9741 in vm_object_terminate (object=0xc32ea21c)
    at ../../vm/vm_object.h:230
#3  0xc01e96f1 in vm_object_deallocate (object=0xc32ea21c)
    at ../../vm/vm_object.c:382
#4  0xc01e6acb in vm_map_entry_delete (map=0xc3047440, entry=0xc3240190)
    at ../../vm/vm_map.c:1680
#5  0xc01e6c89 in vm_map_delete (map=0xc3047440, start=0, end=3217022976)
    at ../../vm/vm_map.c:1783
#6  0xc01e6d1d in vm_map_remove (map=0xc3047440, start=0, end=3217022976)
    at ../../vm/vm_map.c:1808
#7  0xc0141d20 in exit1 (p=0xc322f0a0, rv=0) at ../../kern/kern_exit.c:220
#8  0xc0141b24 in exit1 (p=0xc322f0a0, rv=-1021614488)
    at ../../kern/kern_exit.c:106
#9  0xc020e41a in syscall (frame={tf_fs = 47, tf_es = 137297967, 
      tf_ds = -1078001617, tf_edi = 136021320, tf_esi = 0, 
      tf_ebp = -1077947348, tf_isp = -1020915756, tf_ebx = -1, 
      tf_edx = 135690384, tf_ecx = 136200192, tf_eax = 1, tf_trapno = 12, 
      tf_err = 2, tf_eip = 135656524, tf_cs = 31, tf_eflags = 582, 
      tf_esp = -1077947368, tf_ss = 47}) at ../../i386/i386/trap.c:1056
#10 0xc0202cc0 in Xint0x80_syscall ()
error reading /proc/27157/mem

And for extra points:

(kgdb) frame 4
#4  0xc01e6acb in vm_map_entry_delete (map=0xc3047440, entry=0xc3240190)
    at ../../vm/vm_map.c:1680
1680                    vm_object_deallocate(entry->object.vm_object);
(kgdb) p/x *entry
$10 = {prev = 0xc3047460, next = 0xc3249e38, start = 0x81c6000, 
  end = 0x8458000, avail_ssize = 0x0, object = {vm_object = 0xc32ea21c, 
    sub_map = 0xc32ea21c}, offset = 0x15000, eflags = 0x0, protection = 0x7, 
  max_protection = 0x7, inheritance = 0x1, wired_count = 0x0}

I haven't made any clever conclusions from this, but you might do better.

>    Note:  the process cannot be swapped out, so if you've had a process
>    stuck in objtrm for a long time try doing as "ps axfl" to force it's
>    upages in and then gdb should be able to backtrace it.  The 'f' in the ps
>    does that.

Cute.  After the ps axlf, all the swapped out processes went from 0 to 8 KB
resident.  But the stuck process stayed at 0 KB resident.  It wasn't
swapped out anyway, according to the ps flags, so it should have had some
resident pages.  Seems like a contradiction to me.

Stephen.


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199907091033.UAA03176>