Received: from localhost (unknown [200.46.204.183]) by postgresql.org (Postfix) with ESMTP id 4F60D2E2D8F for ; Wed, 28 Nov 2007 18:40:11 -0400 (AST) Received: from postgresql.org ([200.46.204.71]) by localhost (mx1.hub.org [200.46.204.183]) (amavisd-maia, port 10024) with ESMTP id 38937-02 for ; Wed, 28 Nov 2007 18:40:08 -0400 (AST) Received: from web37312.mail.mud.yahoo.com (web37312.mail.mud.yahoo.com [209.191.91.129]) by postgresql.org (Postfix) with SMTP id C3AC42E2D81 for ; Wed, 28 Nov 2007 18:40:07 -0400 (AST) Received: (qmail 85112 invoked by uid 60001); 28 Nov 2007 22:40:06 -0000 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.com; h=X-YMail-OSG:Received:X-Mailer:Date:From:Subject:To:MIME-Version:Content-Type:Message-ID; b=Z6pffSIWLBVUNAw6A30eOQVPZcgA7Mblb2CJtgCNYkY2MWSn1yGnZ4M7OqlxbByZIwTgxRcx00agNyoNkcoyLY1iM/5MrB4IO/UGm/afPbUE/qS+ecXiLgQJlC5o0h81OHHgy06rwaZiAiBiaj2rUc+huUCeWwSqYJCfmcHH2pc=; X-YMail-OSG: 1_Dnq5EVM1nLOXsFyh5MA9t50GgAei1NRK07A6qIjrbmEHMA3sjrsMPwuaWHPgCjpWSyv4s0L4BqHjNHBKIzRLjm8LcYW3fgcLr29yciVM7lmNA3Y8o- Received: from [66.226.193.82] by web37312.mail.mud.yahoo.com via HTTP; Wed, 28 Nov 2007 14:40:06 PST X-Mailer: YahooMailRC/818.27 YahooMailWebService/0.7.157 Date: Wed, 28 Nov 2007 14:40:06 -0800 (PST) From: andrew klassen Subject: postmaster process and multithreading To: pgsql-interfaces MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="0-799748413-1196289606=:84474" Message-ID: <642562.84474.qm@web37312.mail.mud.yahoo.com> X-Virus-Scanned: Maia Mailguard 1.0.1 X-Archive-Number: 200711/18 X-Sequence-Number: 6662 --0-799748413-1196289606=:84474 Content-Type: text/plain; charset=us-ascii I compiled postgres with threading enabled because I wanted multithreading in the client process that I was writing. I don't necessarily care if all server processes are multithreaded but it does look like it affects the postmaster process in some way. The reason I am asking is because sometimes the postmaster will create a core dump and it will show two threads but the backtrace on both threads does not show any helpful information. I am wondering if I can disable multithreading in the postmaster/server file compiles and by doing so make the gdb output a little more helpful. I have include gdb backtraces. Any ideas are welcome. BTW I am running postgres 8.2.5 and Freebsd 4.10. Here is what I get: # gdb postgres -c /cores/postgres-0-474dcec7 GNU gdb 4.18 (FreeBSD) Copyright 1998 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. Core was generated by `postgres'. Program terminated with signal 11, Segmentation fault. Reading symbols from /usr/lib/libcrypt.so.2...done. Reading symbols from /usr/lib/libm.so.2...done. Reading symbols from /usr/lib/libc_r.so.4...done. Reading symbols from /usr/libexec/ld-elf.so.1...done. #0 0x8837bc94 in thread_sigframe_add (thread=0x0, sig=0, has_args=0) at /usr/bsd/src/lib/libc_r/uthread/uthread_sig.c:1093 1093 /usr/bsd/src/lib/libc_r/uthread/uthread_sig.c: No such file or directory. (gdb) bt #0 0x8837bc94 in thread_sigframe_add (thread=0x0, sig=0, has_args=0) at /usr/bsd/src/lib/libc_r/uthread/uthread_sig.c:1093 (gdb) info threads 2 process 264745 _thread_kern_scheduler () at /usr/bsd/src/lib/libc_r/uthread/uthread_kern.c:602 * 1 process 133673 0x8837bc94 in thread_sigframe_add (thread=0x0, sig=0, has_args=0) at /usr/bsd/src/lib/libc_r/uthread/uthread_sig.c:1093 (gdb) thread 2 [Switching to thread 2 (process 264745)] #0 _thread_kern_scheduler () at /usr/bsd/src/lib/libc_r/uthread/uthread_kern.c:602 602 /usr/bsd/src/lib/libc_r/uthread/uthread_kern.c: No such file or directory. (gdb) bt #0 _thread_kern_scheduler () at /usr/bsd/src/lib/libc_r/uthread/uthread_kern.c:602 #1 0x0 in ?? () (gdb) bt full #0 _thread_kern_scheduler () at /usr/bsd/src/lib/libc_r/uthread/uthread_kern.c:602 ts = {tv_sec = 102, tv_nsec = 799262000} tv = {tv_sec = 102, tv_usec = 799262} curthread = (struct pthread *) 0x8327000 pthread = 0x883c5090 pthread_h = 0x8327000 current_tick = 0 add_to_prioq = 1 #1 0x0 in ?? () No symbol table info available. (gdb) thread 1 [Switching to thread 1 (process 133673)] #0 0x8837bc94 in thread_sigframe_add (thread=0x0, sig=0, has_args=0) at /usr/bsd/src/lib/libc_r/uthread/uthread_sig.c:1093 1093 /usr/bsd/src/lib/libc_r/uthread/uthread_sig.c: No such file or directory. (gdb) bt full #0 0x8837bc94 in thread_sigframe_add (thread=0x0, sig=0, has_args=0) at /usr/bsd/src/lib/libc_r/uthread/uthread_sig.c:1093 has_args = -2009207968 psf = (struct pthread_signal_frame *) 0x0 stackp = 0 (gdb) l main 55 main.c: No such file or directory. (gdb) l PostmasterMain 373 postmaster.c: No such file or directory. (gdb) print IsPostmasterEnvironment $1 = 1 '\001' (gdb) print MyProcPid $2 = 2601 (gdb) print IsUnderPostmaster $3 = 0 '\000' (gdb) print StartupPID $4 = 0 (gdb) print BgWriterPID $5 = 2652 (gdb) print PgStatPID $6 = 2653 (gdb) quit If I attach gdb to a health postmaster thread #1 bt still does not look correct: 0x8838094c in __sys_poll () from /usr/lib/libc_r.so.4 (gdb) info threads 2 process 36551, thread 2 0x8837f1bb in _thread_kern_sched (ucp=0x0) at /usr/bsd/src/lib/libc_r/uthread/uthread_kern.c:123 * 1 process 36551, thread 1 0x8838094c in __sys_poll () from /usr/lib/libc_r.so.4 (gdb) bt full #0 0x8838094c in __sys_poll () from /usr/lib/libc_r.so.4 No symbol table info available. #1 0x8837fe74 in thread_kern_poll (wait_reqd=1) at /usr/bsd/src/lib/libc_r/uthread/uthread_kern.c:829 count = 0 i = -2009313020 found = -1077937916 kern_pipe_added = 1 nfds = 3 timeout_ms = 60000 pthread = (struct pthread *) 0x0 ts = {tv_sec = 6593, tv_nsec = 729608000} tv = {tv_sec = 6593, tv_usec = 729608} #2 0x8837f81e in _thread_kern_scheduler () at /usr/bsd/src/lib/libc_r/uthread/uthread_kern.c:504 ts = {tv_sec = 6593, tv_nsec = 729608000} tv = {tv_sec = 6593, tv_usec = 729608} curthread = (struct pthread *) 0x883dc9a0 pthread = 0x883c5090 pthread_h = 0x0 current_tick = 2285764128 add_to_prioq = 0 #3 0x0 in ?? () No symbol table info available. (gdb) thread 2 [Switching to thread 2 (process 36551, thread 2)] #0 0x8837f1bb in _thread_kern_sched (ucp=0x0) at /usrbsd/src/lib/libc_r/uthread/uthread_kern.c:123 123 /usr/bsd/src/lib/libc_r/uthread/uthread_kern.c: No such file or di rectory. (gdb) bt full #0 0x8837f1bb in _thread_kern_sched (ucp=0x0) at /usr/bsd/src/lib/libc_r/uthread/uthread_kern.c:123 curthread = (struct pthread *) 0x8327000 #1 0x8837f9f9 in _thread_kern_sched_state (state=PS_SELECT_WAIT, fname=0x883be360 "/usr/bsd/src/lib/libc_r/uthread/uthread_select.c", lineno=149) at /usr/bsd/src/lib/libc_r/uthread/uthread_kern.c:637 state = PS_SELECT_WAIT fname = 0x883be360 "/usr/bsd/src/lib/libc_r/uthread/uthread_select .c" curthread = (struct pthread *) 0xbfbff904 #2 0x8837c94f in _select (numfds=7, readfds=0xbfbff9d4, writefds=0x0, exceptfds=0x0, timeout=0xbfbff9c4) at /usr/bsd/src/lib/libc_r/uthread/uthread_select.c:149 timeout = (struct timeval *) 0xbfbff904 curthread = (struct pthread *) 0x8327000 ts = {tv_sec = 60, tv_nsec = 0} i = 4 ret = 0 f_wait = 1 pfd_index = -1077937916 got_events = -1077937900 fd_count = 2 data = {nfds = 2, fds = 0x8327c00} #3 0x8837cb66 in select (numfds=7, readfds=0xbfbff9d4, writefds=0x0, exceptfds=0x0, timeout=0xbfbff9c4) at /usr/bsd/src/lib/libc_r/uthread/uthread_select.c:271 exceptfds = (fd_set *) 0x0 timeout = (struct timeval *) 0xbfbff9c4 ret = -1077937724 #4 0x817c80b in ServerLoop () at postmaster.c:1162 port = (Port *) 0xbfbff9c4 rmask = {fds_bits = {96, 0 }} timeout = {tv_sec = 60, tv_usec = 0} selres = -1077937724 i = -1077937452 readmask = {fds_bits = {96, 0 }} nSockets = 7 now = -1077937724 last_touch_time = 1196288034 earlier = {tv_sec = 1196288034, tv_usec = 365978} later = {tv_sec = -2009303956, tv_usec = 2} #5 0x817c42a in PostmasterMain (argc=11, argv=0xbfbffbac) at postmaster.c:966 opt = 137671169 status = 209 userDoption = 0x834b200 "\220\002" i = 60000 #6 0x8142974 in main (argc=11, argv=0xbfbffbac) at main.c:188 argv = (char **) 0xbfbffbac (gdb) ____________________________________________________________________________________ Never miss a thing. Make Yahoo your home page. http://www.yahoo.com/r/hs --0-799748413-1196289606=:84474 Content-Type: text/html; charset=us-ascii
 
I compiled postgres with threading enabled because I wanted
multithreading in the client process that I was writing. I don't
necessarily care if all server processes are multithreaded but
it does look like it affects the postmaster process in some way.
 
The reason I am asking is because sometimes the postmaster
will create a core dump and it will show two threads but the
backtrace on both threads does not show any helpful information.
I am wondering if I can disable multithreading in the postmaster/server
file compiles and by doing so make the gdb output a little more helpful.
 
I have include gdb backtraces. Any ideas are welcome.
BTW I am running postgres 8.2.5 and Freebsd 4.10.
 
Here is what I get:
# gdb postgres -c /cores/postgres-0-474dcec7
GNU gdb 4.18 (FreeBSD)
Copyright 1998 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.
Core was generated by `postgres'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /usr/lib/libcrypt.so.2...done.
Reading symbols from /usr/lib/libm.so.2...done.
Reading symbols from /usr/lib/libc_r.so.4...done.
Reading symbols from /usr/libexec/ld-elf.so.1...done.
#0  0x8837bc94 in thread_sigframe_add (thread=0x0, sig=0, has_args=0)
    at /usr/bsd/src/lib/libc_r/uthread/uthread_sig.c:1093
1093    /usr/bsd/src/lib/libc_r/uthread/uthread_sig.c: No such file or directory.
(gdb) bt
#0  0x8837bc94 in thread_sigframe_add (thread=0x0, sig=0, has_args=0)
    at /usr/bsd/src/lib/libc_r/uthread/uthread_sig.c:1093
(gdb) info threads
  2 process 264745  _thread_kern_scheduler ()
    at /usr/bsd/src/lib/libc_r/uthread/uthread_kern.c:602
* 1 process 133673  0x8837bc94 in thread_sigframe_add (thread=0x0, sig=0,
    has_args=0) at /usr/bsd/src/lib/libc_r/uthread/uthread_sig.c:1093
(gdb) thread 2
[Switching to thread 2 (process 264745)]
#0  _thread_kern_scheduler ()
    at /usr/bsd/src/lib/libc_r/uthread/uthread_kern.c:602
602     /usr/bsd/src/lib/libc_r/uthread/uthread_kern.c: No such file or directory.
(gdb) bt
#0  _thread_kern_scheduler ()
    at /usr/bsd/src/lib/libc_r/uthread/uthread_kern.c:602
#1  0x0 in ?? ()
(gdb) bt full
#0  _thread_kern_scheduler ()
    at /usr/bsd/src/lib/libc_r/uthread/uthread_kern.c:602
        ts = {tv_sec = 102, tv_nsec = 799262000}
        tv = {tv_sec = 102, tv_usec = 799262}
        curthread = (struct pthread *) 0x8327000
        pthread = 0x883c5090
        pthread_h = 0x8327000
        current_tick = 0
        add_to_prioq = 1
#1  0x0 in ?? ()
No symbol table info available.
(gdb) thread 1
[Switching to thread 1 (process 133673)]
#0  0x8837bc94 in thread_sigframe_add (thread=0x0, sig=0, has_args=0)
    at /usr/bsd/src/lib/libc_r/uthread/uthread_sig.c:1093
1093    /usr/bsd/src/lib/libc_r/uthread/uthread_sig.c: No such file or directory.
(gdb) bt full
#0  0x8837bc94 in thread_sigframe_add (thread=0x0, sig=0, has_args=0)
    at /usr/bsd/src/lib/libc_r/uthread/uthread_sig.c:1093
        has_args = -2009207968
        psf = (struct pthread_signal_frame *) 0x0
        stackp = 0
(gdb) l main
55      main.c: No such file or directory.
(gdb) l PostmasterMain
373     postmaster.c: No such file or directory.
(gdb) print IsPostmasterEnvironment
$1 = 1 '\001'
(gdb) print MyProcPid
$2 = 2601
(gdb) print IsUnderPostmaster
$3 = 0 '\000'
(gdb) print StartupPID
$4 = 0
(gdb) print BgWriterPID
$5 = 2652
(gdb) print PgStatPID
$6 = 2653
(gdb) quit
 
If I attach gdb to a health postmaster thread #1 bt still does not look correct:
 
0x8838094c in __sys_poll () from /usr/lib/libc_r.so.4
(gdb) info threads
  2 process 36551, thread 2  0x8837f1bb in _thread_kern_sched (ucp=0x0)
    at /usr/bsd/src/lib/libc_r/uthread/uthread_kern.c:123
* 1 process 36551, thread 1  0x8838094c in __sys_poll () from /usr/lib/libc_r.so.4
(gdb) bt full
#0  0x8838094c in __sys_poll () from /usr/lib/libc_r.so.4
No symbol table info available.
#1  0x8837fe74 in thread_kern_poll (wait_reqd=1)
    at /usr/bsd/src/lib/libc_r/uthread/uthread_kern.c:829
        count = 0
        i = -2009313020
        found = -1077937916
        kern_pipe_added = 1
        nfds = 3
        timeout_ms = 60000
        pthread = (struct pthread *) 0x0
        ts = {tv_sec = 6593, tv_nsec = 729608000}
        tv = {tv_sec = 6593, tv_usec = 729608}
#2  0x8837f81e in _thread_kern_scheduler ()
    at /usr/bsd/src/lib/libc_r/uthread/uthread_kern.c:504
        ts = {tv_sec = 6593, tv_nsec = 729608000}
        tv = {tv_sec = 6593, tv_usec = 729608}
        curthread = (struct pthread *) 0x883dc9a0
        pthread = 0x883c5090
        pthread_h = 0x0
        current_tick = 2285764128
        add_to_prioq = 0
#3  0x0 in ?? ()
No symbol table info available.
(gdb) thread 2
[Switching to thread 2 (process 36551, thread 2)]
#0  0x8837f1bb in _thread_kern_sched (ucp=0x0)
    at /usrbsd/src/lib/libc_r/uthread/uthread_kern.c:123
123     /usr/bsd/src/lib/libc_r/uthread/uthread_kern.c: No such file or di
rectory.
(gdb) bt full
#0  0x8837f1bb in _thread_kern_sched (ucp=0x0)
    at /usr/bsd/src/lib/libc_r/uthread/uthread_kern.c:123
        curthread = (struct pthread *) 0x8327000
#1  0x8837f9f9 in _thread_kern_sched_state (state=PS_SELECT_WAIT,
    fname=0x883be360 "/usr/bsd/src/lib/libc_r/uthread/uthread_select.c",
    lineno=149) at /usr/bsd/src/lib/libc_r/uthread/uthread_kern.c:637
        state = PS_SELECT_WAIT
        fname = 0x883be360 "/usr/bsd/src/lib/libc_r/uthread/uthread_select
.c"
        curthread = (struct pthread *) 0xbfbff904
#2  0x8837c94f in _select (numfds=7, readfds=0xbfbff9d4, writefds=0x0,
    exceptfds=0x0, timeout=0xbfbff9c4)
    at /usr/bsd/src/lib/libc_r/uthread/uthread_select.c:149
        timeout = (struct timeval *) 0xbfbff904
        curthread = (struct pthread *) 0x8327000
        ts = {tv_sec = 60, tv_nsec = 0}
        i = 4
        ret = 0
        f_wait = 1
        pfd_index = -1077937916
        got_events = -1077937900
        fd_count = 2
        data = {nfds = 2, fds = 0x8327c00}
#3  0x8837cb66 in select (numfds=7, readfds=0xbfbff9d4, writefds=0x0,
    exceptfds=0x0, timeout=0xbfbff9c4)
    at /usr/bsd/src/lib/libc_r/uthread/uthread_select.c:271
        exceptfds = (fd_set *) 0x0
        timeout = (struct timeval *) 0xbfbff9c4
        ret = -1077937724
#4  0x817c80b in ServerLoop () at postmaster.c:1162
        port = (Port *) 0xbfbff9c4
        rmask = {fds_bits = {96, 0 <repeats 31 times>}}
        timeout = {tv_sec = 60, tv_usec = 0}
        selres = -1077937724
        i = -1077937452
        readmask = {fds_bits = {96, 0 <repeats 31 times>}}
        nSockets = 7
        now = -1077937724
        last_touch_time = 1196288034
        earlier = {tv_sec = 1196288034, tv_usec = 365978}
        later = {tv_sec = -2009303956, tv_usec = 2}
#5  0x817c42a in PostmasterMain (argc=11, argv=0xbfbffbac) at postmaster.c:966
        opt = 137671169
        status = 209
        userDoption = 0x834b200 "\220\002"
        i = 60000
#6  0x8142974 in main (argc=11, argv=0xbfbffbac) at main.c:188
        argv = (char **) 0xbfbffbac
(gdb)
 


Be a better sports nut! Let your teams follow you with Yahoo Mobile. Try it now. --0-799748413-1196289606=:84474--