Performance Tuning of apache2.0 prefork and worker modules

Source: Internet
Author: User

 

Article Source: http://hi.baidu.com/top2top/blog/item/0bea951600a16050f2de322b.html apache2.0 prefork and worker module Performance Tuning
The performance improvement of Apache 2.0 is the most attractive. On UNIX systems that support POSIX Threads, Apache can use different MPM to run in a mix of multi-process and multi-thread modes to enhance the scalability of some configurations. Compared with Apache 1.3, version 2.0 has made a lot of Optimizations to improve processing capabilities and scalability, and most of the improvements will take effect by default. However, at the time of compilation and running, 2.0 also has many options that can significantly improve the performance. This article does not want to describe commands that exchange functions for speed, such as hostnamelookups, but only describes the core features that affect performance in 2.0: mpm (Multi-processing modules, multi-channel processing module) basic working principle and configuration instructions.

It is no exaggeration to say that the introduction of MPM is the most important change in Apache 2.0. As you know, Apache is based on modular design, while Apache 2.0 extends the most basic functions of modular design to Web servers. The server is loaded with a multi-channel processing module, which is responsible for binding the network port of the Local Machine, accepting requests, and scheduling sub-processes to process requests. Extended modular design has two important benefits:

◆ Apache supports multiple operating systems in a more concise and effective manner;

◆ Servers can be customized according to the special needs of the site.

At the user level, mpm looks very similar to other Apache modules. The main difference is that only one MPM can be loaded to the server at any time.

Specifies the MPM method.

The following describes how to specify MPM in Apache 2.0 based on Red Hat Linux 9 (Apache uses 2.0.45 ). First decompress the source code package httpd-2.0.45.tar.gz, generate the httpd-2.0.45 directory (APACHE 1.3source code package naming rules are apache_1.3.nn.tar.gz, and 2.0version is httpd-2.0.nn.tar.gz, where NN is the version number ).

Go to the httpd-2.0.45 directory and run the following code:

$./Configure -- help | grep mpm

 

Shown as follows:

-- With-MPM = mpm
Choose the process model for Apache to use.
MPM = {BEOs | worker | prefork | mpmt_os2 | perchild | leader | threadpool}

 

The preceding operation is used to select the MPM module of the process model to be used. BEOs and mpmt_os2 are the default MPM on BEOs and OS/2 respectively. perchild is designed to run different sub-processes with different user and group identities. This is especially useful when running multiple virtual hosts that require CGI, and it is better than the suexec mechanism in version 1.3. The leader and threadpool are both worker-based variants and are still in the experimental stage. In some cases, they do not work as expected. Therefore, Apache is not officially recommended. Therefore, we will focus on prefork and worker, the two products with the greatest performance relationship mpm (for other MPM details, see apache official documentation: http://httpd.apache.org/docs-2.0/mod ).

Working Principle and configuration of prefork

If "-- with-MPM" is not used to explicitly specify an MPM, prefork is the default MPM on UNIX platforms. It adopts the pre-school child process mode, which is also used in Apache 1.3. Prefork itself does not use threads. Version 2.0 uses it to maintain compatibility with version 1.3. On the other hand, prefork uses a separate sub-process to process different requests, processes are independent from each other, which makes them one of the most stable MPM.

If prefork is used, after make compilation and make install, "httpd-L" is used to determine the currently used MPM. C (if you see worker. C indicates that worker MPM is used, and so on ). Check the default httpd. conf configuration file, which contains the following configuration sections:

<Ifmodule prefork. c>
Startservers 5
Minspareservers 5
Maxspareservers 10
Maxclients 150
Maxrequestsperchild 0
</Ifmodule>

 

The working principle of prefork is that after the control process initially creates a "startservers" sub-process, it creates a process to meet the needs of the minspareservers settings, waits for one second, creates two more, and then waits for one second, create four more ...... In this way, the number of Created processes is increased exponentially, up to 32 processes per second until the value set by minspareservers is met. This is the origin of prefork. This mode eliminates the need to generate new processes when requests arrive, thus reducing system overhead and increasing performance.

Maxspareservers sets the maximum number of idle processes. If the number of idle processes is greater than this value, Apache automatically kill unnecessary processes. This value should not be too large, but if it is smaller than minspareservers, Apache will automatically adjust it to minspareservers + 1. If the site load is large, consider increasing minspareservers and maxspareservers at the same time.

Maxrequestsperchild sets the number of requests that each sub-process can process. Each sub-process is automatically destroyed after processing "maxrequestsperchild" requests. 0 means that the sub-process will never be destroyed. Although the default value is 0, each sub-process can process more requests, setting it to a non-zero value also has two important advantages:

◆ Prevents accidental Memory leakage;

◆ When the server load drops, the number of sub-processes is automatically reduced.

Therefore, you can adjust this value based on the server load. I think about 10000 is suitable.

Maxclients is the most important of these commands. It sets the request that Apache can process at the same time and is the parameter that has the greatest impact on Apache performance. The default value of 150 is far from enough. If the total number of requests has reached this value (you can confirm it through PS-Ef | grep HTTP | WC-l), the subsequent requests will be queued, until a processed request is completed. This is the main reason why there are still a lot of system resources and HTTP access is slow. The system administrator can dynamically adjust the value based on hardware configuration and load conditions. In theory, the larger the value, the more requests can be processed, but the default limit of Apache cannot be greater than 256. If you set this value to greater than 256, Apache cannot start. In fact, 256 is not enough for sites with a slightly higher load. In Apache 1.3, this is a hard limitation. To increase this value, you must search for 256 in src/include/httpd. h under the source code tree manually modified before "Configure", and you will find the line "# define hard_server_limit 256. Change 256 to the value to be increased (such as 4000), and then re-compile Apache. Added the serverlimit command in Apache 2.0 to increase maxclients without re-compiling Apache. The following is the prefork configuration section of the author:

<Ifmodule prefork. c>
Startservers 10
Minspareservers 10
Maxspareservers 15
Serverlimit 2000
Maxclients 1000
Maxrequestsperchild 10000
</Ifmodule>

 

In the preceding configuration, the maximum serverlimit value is 20000, which is sufficient for most sites. If you must increase the value, modify the following two lines in server/MPM/prefork. C under the source code tree:

# Define default_server_limit 256
# Define max_server_limit 20000

 

Working Principle and configuration of worker

Compared with prefork, worker is a brand new MPM that supports multi-thread and multi-process hybrid models in version 2.0. Because threads are used for processing, a relatively large number of requests can be processed, and the overhead of system resources is smaller than that of process-based servers. However, worker also uses multiple processes, and each process generates multiple threads to achieve stability based on the process server. This kind of MPM will be the trend of Apache 2.0.

After configure-with-MPM = worker, make and install it. The following configuration segments are available in the httpd. conf generated by default:

<Ifmodule worker. c>
Startservers 2
Maxclients 150
Minsparethreads 25
Maxsparethreads 75
Threadsperchild 25
Maxrequestsperchild 0
</Ifmodule>

 

The working principle of worker is that the main control process generates a "startservers" subprocess. Each subprocess contains a fixed number of threadsperchild threads, and each thread processes Requests independently. Similarly, in order not to generate a thread when the request arrives, minsparethreads and maxsparethreads set the minimum and maximum number of Idle threads, while maxclients sets the total number of threads in all sub-processes. If the total number of threads in the existing sub-process cannot meet the load, the control process will derive a new sub-process.

The maximum default values of minsparethreads and maxsparethreads are 75 and 250, respectively. These two parameters have little impact on Apache performance and can be adjusted as needed.

Threadsperchild is the most performance-related command in worker MPM. The maximum default value of threadsperchild is 64. If the load is large, 64 is not enough. The threadlimit command must be explicitly used. The maximum default value is 20000. The preceding two values are located in the following two lines in the source code tree server/MPM/worker. C:

# Define default_thread_limit 64
# Define max_thread_limit 20000

 

These two rows correspond to the number of restrictions of threadsperchild and threadlimit. It is best to change 64 to the desired value before configure. Note: Do not set these two values too high to exceed the processing capability of the system, so that the system is unstable because Apache does not start.

In worker mode, the total number of requests that can be processed simultaneously is determined by the total number of sub-processes multiplied by the value of threadsperchild. The value must be greater than or equal to maxclients. If the load is large and the number of existing sub-processes cannot meet the requirements, the control process will derive a new sub-process. By default, the maximum number of sub-processes is 16. When you increase the number, you must explicitly declare serverlimit (the maximum value is 20000 ). These two values are located in the following two lines in the source code tree server/MPM/worker. C:

# Define default_server_limit 16
# Define max_server_limit 20000

 

Note that if serverlimit is explicitly declared, the value multiplied by threadsperchild must be greater than or equal to maxclients, and maxclients must be an integer multiple of threadsperchild, otherwise, Apache automatically adjusts to a value (which may be an unexpected value ). The following is the author's worker configuration section:

<Ifmodule worker. c>
Startservers 3
Maxclients 2000
Serverlimit 25
Minsparethreads 50
Maxsparethread S 200
Threadlimit 200
Threadsperchild 100
Maxrequestsperchild 0
</Ifmodule>

 

Through the above description, we can understand the working principles of the two important mpm, prefork and worker in Apache 2.0, and can configure APACHE-related core parameters according to the actual situation, to achieve maximum performance and stability.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.