axis-c-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Chris Darroch <>
Subject Re: [Axis2] Apache process problems [Was - Re: Urgent: Specifying scope in Axis2c]
Date Thu, 08 Nov 2007 22:21:28 GMT
Uthaiyashankar wrote:

> We can use global mutex to control the access of shared memory. An 
> example implementation is given in  
> mod_ldap is also using a similar approach to cache and share data 
> between child processes.
> However, to hide the low level details from service/module 
> implementers, we might have to write a wrapper to manage the shared 
> memory, growing/shrinking the shared memory according to the demand, 
> creating objects in shared memory, etc.

   One caution: growing/shrinking shared memory is likely to be a
pretty complex operation, if it's even possible with certain shared-memory
implementations.  APR provides a number of different shared memory
options and chooses between them at compile-time; the only options
to the programmer are named-based vs. anonymous.

   To resize the shared memory block, you'd probably need name-based
shared memory, first of all.  The only way I can see resizing would
work is if all the processes coordinate; suppose, for example, that
process A acquires the global lock, it could then allocate a new
shared-memory block, copy all the data from the old one, and write
the filename associated with the new block into a special location
in the old one or communicate it somehow to all other processes;
they then need to attach to the new block and detach from the old block.
Depending on the underlying implementation, you might, I suppose,
need to also manage a reference count of how many processes are
still attached to the old block, and only destroy it when all had
attached to the new block; this of course gets complicated if a
process dies suddenly, etc.

   This is why httpd, for its scoreboard, simply creates a large
shared memory segment at startup (based on compile-time limits)
and never tries to resize it.

   A number of httpd modules already manage data in shared memory
segments (in one case, by borrowing part of the scoreboard, but
that's not ideal).  I proposed, for httpd 3.0, some ideas about how
to try to abstract the subject of inter-process data sharing, such
that different providers could be plugged into a generic interface
(shared memory, memcache, etc.):   

   I think Axis2/C might be a good candidate to be another user of
this mechanism ... but, of course, it exists only on paper so far.
With luck I'll get back to this in 2008; time permitting, of course!



GPG Key ID: 366A375B
GPG Key Fingerprint: 485E 5041 17E1 E2BB C263  E4DE C8E3 FA36 366A 375B

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message