On Wed, 2005-08-24 at 10:31 +1000, Badai Aqrandista wrote:
> Anyway, to fix this, I'm trying to make my onw shared memory with 
> Apache::SharedMem.

Don't use that module.  It's very inefficient.

> But it seems that shared memory is just a memory area 
> that any process can read from or write to, not a memory that can become 
> part of any process's memory space.
> 
> I'd like to put the read only data in a memory area that can become part of 
> any process's memory space, like threads sharing memory space. Is there any 
> way I can do that?

You can share read-only data by loading it into normal variables during
startup.  You can share read/write data by keeping it in a database
(including things like BerkeleyDB or Cache::FastMmap) and only reading
the small parts of it that you need in each process.

There is no way to access data in perl without the size of the process
you read the data from allocating memory to hold that data while you use
it.  In other words, shared memory is not useful for reducing the size
of existing processes unless those processes are currently each holding
a lot of data that they never use.

> Does this sound like fixing the wrong problem?

Yes.  Put a reverse proxy in front of your server, tune MaxClients so
you won't go into swap, and then benchmark to see how much load you can
handle.  Then think about tuning.

- Perrin

Reply via email to