any idea what
179     0     STANDBY     UNKNOWN     -1     -1     (null)     -1     -1     -3    30    -1    0    -1
180    0    STANDBY    UNKNOWN    -1    -1    (null)    -1    -1    -3    30    -1    0    -1
181    0    STANDBY    UNKNOWN    -1    -1    (null)    -1    -1    -3    30    -1    0    -1
does in there?
I got quite lot of them (~20 out of 220)

At first i thought that these are processors changing state or something but they stay like that for a long time.


Stefan Seufert wrote:
Replying to myself:

  
(This problem is another argument for having a handler to display the
contents of the child_info_table. I'll try to find some free time in
order to code one).
    

I had a look at mod_status and noticed that it already has a nice
extension hook. I extended peruser to register this hook and to dump its
child_info table when the status is requested. Please find the patch
attached to this email. You should compile and enable mod_status as
usual (don't forget to set ExtendedStatus to "on"). If you call your
/server-status handler as usual you should notice a new section at the
end of the output which will look like this:

  
ID	PID	STATUS	TYPE		UID	GID	CHROOT	INPUT	OUTPUT	SOCK_FD	TOTAL P	MAX P	IDLE P	MIN FREE PROCESSORS
0	30450	ACTIVE	MULTIPLEXER	65534	65534	(null)	11	12	-1	1	10	1	2
1	30451	ACTIVE	PROCESSOR	1002	407	(null)	13	14	-1	4	20	3	4
2	30455	ACTIVE	PROCESSOR	1003	408	(null)	17	18	-1	4	20	4	4
3	30452	ACTIVE	WORKER		1002	407	(null)	13	14	-1	4	20	3	4
4	30453	ACTIVE	WORKER		1002	407	(null)	13	14	-1	4	20	3	4
5	30454	ACTIVE	WORKER		1002	407	(null)	13	14	-1	4	20	3	4
6	30456	ACTIVE	WORKER		1003	408	(null)	17	18	-1	4	20	4	4
7	30457	ACTIVE	WORKER		1003	408	(null)	17	18	-1	4	20	4	4
8	30458	ACTIVE	WORKER		1003	408	(null)	17	18	-1	4	20	4	4
    

I hope that people will find this useful in monitoring/debugging peruser.

Janno: Can you try to figure out what's going on using this patch? The
stuff in your last emails was pretty hard to analyze because of all the
word wrapping. If you cannot teach your email client to leave the lines
intact then an attachment/url might be the better choice.

Sean: It looks like a lot of nice patches and fixes are floating around
right now. Can you please try to wrap them up in a new release? At the
moment everybody seems to have different patches applied which makes
sorting out stuff really ugly. Call it "beta" or something like that if
you feel that it is not stable enough for a release.

Stefan




  

--- peruser.c.without-status 2007-01-30 20:40:38.000000000 +0100 +++ peruser.c 2007-01-30 21:25:17.000000000 +0100 @@ -98,6 +98,7 @@ #include "ap_mmn.h" #include "apr_poll.h" #include "util_ebcdic.h" +#include "mod_status.h" #ifdef HAVE_BSTRING_H #include <bstring.h> /* for IRIX, FD_SET calls bzero() */ @@ -2655,6 +2656,49 @@ return OK; } +static int peruser_status_hook(request_rec *r, int flags) +{ + int x; + server_env_t *senv; + + if (flags & AP_STATUS_SHORT) + return OK; + + ap_rputs("<hr>\n", r); + ap_rputs("<h2>peruser status</h2>\n", r); + ap_rputs("<table border=\"0\">\n", r); + ap_rputs("<tr><td>ID</td><td>PID</td><td>STATUS</td><td>TYPE</td><td>UID</td>" + "<td>GID</td><td>CHROOT</td><td>INPUT</td>" + "<td>OUTPUT</td><td>SOCK_FD</td>" + "<td>TOTAL PROCESSORS</td><td>MAX PROCESSORS</td>" + "<td>IDLE PROCESSORS</td><td>MIN FREE PROCESSORS</td></tr>\n", r); + for (x = 0; x < NUM_CHILDS; x++) + { + senv = CHILD_INFO_TABLE[x].senv; + ap_rprintf(r, "<tr><td>%3d</td><td>%5d</td><td>%8s</td><td>%12s</td>" + "<td>%4d</td><td>%4d</td><td>%25s</td><td>%5d</td>" + "<td>%6d</td><td>%7d</td><td>%d</td><td>%d</td>" + "<td>%d</td><td>%d</td></tr>\n", + CHILD_INFO_TABLE[x].id, + CHILD_INFO_TABLE[x].pid, + child_status_string(CHILD_INFO_TABLE[x].status), + child_type_string(CHILD_INFO_TABLE[x].type), + senv == NULL ? -1 : senv->uid, + senv == NULL ? -1 : senv->gid, + senv == NULL ? NULL : senv->chroot, + senv == NULL ? -1 : CHILD_INFO_TABLE[x].senv->input, + senv == NULL ? -1 : CHILD_INFO_TABLE[x].senv->output, + CHILD_INFO_TABLE[x].sock_fd, + total_processors(x), + senv == NULL ? -1 : CHILD_INFO_TABLE[x].senv->max_processors, + idle_processors(x), + senv == NULL ? -1 : CHILD_INFO_TABLE[x].senv->min_free_processors + ); + } + ap_rputs("</table>\n", r); + return OK; +} + static void peruser_hooks(apr_pool_t *p) { /* The peruser open_logs phase must run before the core's, or stderr @@ -2682,6 +2726,8 @@ APR_HOOK_REALLY_FIRST); ap_hook_process_connection(peruser_process_connection, NULL, NULL, APR_HOOK_REALLY_FIRST); + + APR_OPTIONAL_HOOK(ap, status_hook, peruser_status_hook, NULL, NULL, APR_HOOK_MIDDLE); } /* we define an Processor w/ specific uid/gid */

_______________________________________________ Peruser mailing list [email protected] http://www.telana.com/mailman/listinfo/peruser

_______________________________________________
Peruser mailing list
[email protected]
http://www.telana.com/mailman/listinfo/peruser

Reply via email to