worker MPM | prefork MPM | |
---|---|---|
How it works | Uses multiple child processes. It's multi-threaded within each child, and each thread handles a single connection. | Uses multiple child processes, each child handles one connection at a time. |
Fast | fast and highly scalable | speed is comparable to that of worker |
Memory | Memory footprint is comparatively low | Memory usage is high, and more traffic leads to greater memory usage |
Stability | less tolerant of faulty modules, and a faulty thread can affect all the threads in a child process. | highly tolerant of faulty modules and crashing children |
Suited for | multiple processors | single or double CPU systems |
Thursday, November 15, 2007
Apache - Multi-Processing Modules (MPMs)
MPMs are Responsible for binding to network ports on the machine, accepting requests, and dispatching children to handle the requests. For Linux, two types: worker (threaded MPM) and prefork (non-threaded MPM)
Tuesday, July 03, 2007
Better Code Through Destruction
Perl's garbage collector counts references. When the count reaches zero (which means that no one has a reference), Perl reclaims the entity. The approach is simple and effective. However, circular references (when object A has a reference to object B, and object B has a reference to object A) present a problem.
A common example is a tree-like data structure. To navigate both directions--from root to leaves and vice versa--a parent node has a list of children and a child node has a reference to its parent. Many CPAN modules implement their data models this way, including HTML::Tree, XML::DOM, and Text::PDF::File. All these modules provide a method to release the memory. The client application must call the method when it no longer needs an object. However, the requirement of an explicit call is not very appealing and can result in unsafe code.
Solution:
Instead of explicitly calling the method to delete the object, create a special guard object (of another class) whose sole responsibility is to release the resource. When the guard object gets destroyed, its destructor deletes the tree.
Note that now there is no need to call $tree->delete explicitly at the end of the loop. The magic is simple. The code of DESTROY method of the Sentry package calls, in turn, the method delete of the $tree object.
Finally, there is no need to code your own Sentry class. Use Object::Destroyer, originally written by Adam Kennedy.
Source: http://www.perl.com/pub/a/2007/06/07/better-code-through-destruction.html
A common example is a tree-like data structure. To navigate both directions--from root to leaves and vice versa--a parent node has a list of children and a child node has a reference to its parent. Many CPAN modules implement their data models this way, including HTML::Tree, XML::DOM, and Text::PDF::File. All these modules provide a method to release the memory. The client application must call the method when it no longer needs an object. However, the requirement of an explicit call is not very appealing and can result in unsafe code.
Solution:
Instead of explicitly calling the method to delete the object, create a special guard object (of another class) whose sole responsibility is to release the resource. When the guard object gets destroyed, its destructor deletes the tree.
use HTML::TreeBuilder;
foreach my $filename (@ARGV) {
my $tree = HTML::TreeBuilder->new;
$tree->parse_file($filename);
my $sentry = Sentry->new($tree);
next unless $tree->look_down('_tag', 'img');
## next, last or return are safe here.
## Tree will be deleted automatically.
}
package Sentry;
sub new {
my $class = shift;
my $tree = shift;
return bless {tree => $tree}, $class;
}
sub DESTROY {
my $self = shift;
$self->{tree}->delete;
}
Note that now there is no need to call $tree->delete explicitly at the end of the loop. The magic is simple. The code of DESTROY method of the Sentry package calls, in turn, the method delete of the $tree object.
Finally, there is no need to code your own Sentry class. Use Object::Destroyer, originally written by Adam Kennedy.
Source: http://www.perl.com/pub/a/2007/06/07/better-code-through-destruction.html
Thursday, June 21, 2007
Switching between HTTP and HTTPS
Question:
Following statements are there in my Apache2 virtual hosts section
Redirect /host/directory/folder/login.php https://servername/host/directory/folder/login.php
Redirect /host/directory/folder/register.php https://servername/host/directory/folder/register.php
How to return to http (not https) when the above 2 pages are not involved?
Answer:
In HTTP VH:
RewriteRule /.../login.php https://.../login.php [R]
RewriteRule /.../register.php https://.../register.php [R]
In HTTPS VH:
RewriteRule /.../login.php - [S=2]
RewriteRule /.../register.php - [S=1]
RewriteRule ^/(.*) http://servername/$1 [R]
In the HTTPS VH, if you get login.php or register.php you don't rewrite it (the "-"), then you skip the next 2 or 1 RewriteRules ( [S=2], [S=1]) - that is, you skip over the general purpose rewrite back to HTTP. So login.php or register.php get served from HTTPS and everything else goes back to HTTP.
Following statements are there in my Apache2 virtual hosts section
Redirect /host/directory/folder/login.php https://servername/host/directory/folder/login.php
Redirect /host/directory/folder/register.php https://servername/host/directory/folder/register.php
How to return to http (not https) when the above 2 pages are not involved?
Answer:
In HTTP VH:
RewriteRule /.../login.php https://.../login.php [R]
RewriteRule /.../register.php https://.../register.php [R]
In HTTPS VH:
RewriteRule /.../login.php - [S=2]
RewriteRule /.../register.php - [S=1]
RewriteRule ^/(.*) http://servername/$1 [R]
In the HTTPS VH, if you get login.php or register.php you don't rewrite it (the "-"), then you skip the next 2 or 1 RewriteRules ( [S=2], [S=1]) - that is, you skip over the general purpose rewrite back to HTTP. So login.php or register.php get served from HTTPS and everything else goes back to HTTP.
Thursday, June 07, 2007
Perl Code Profiling - Apache::DProf
- In Startup.pl:
# The Apache::DProf requires this
use Apache::Registry; - In conf:
PerlModule Apache::DProf
- Make sure the logs directory has write rights
- Restart Apache & do whatever you want in the browser page
- Stop Apache (only then the tmon.out will get complete output)
- Go to the directory where tmon is (logs/dprof/
/) and run dprofpp
Refer: Code Profiling Techniques
Monday, June 04, 2007
Apache and strace
To display a trace of system calls. Useful for debugging.
root@sri# apachectl stop (First stop Apache and then restart Apache with strace)
root@sri# strace -f -o trace.txt /etc/rc.d/init.d/httpd start
-f: Traces child processes as they are created by currently traced processes.
-o: Outputs to a text file
Subscribe to:
Posts (Atom)