欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

令A(yù)pache中沉睡的無用進程自動退出的方法

 更新時間:2015年06月19日 09:25:46   作者:Laruence  
這篇文章主要介紹了令A(yù)pache中沉睡的無用進程自動退出的方法,利用OPTIONS請求得以實現(xiàn)清理完成任務(wù)后的進程,需要的朋友可以參考下

在Apache的Access Log中會看到很多如下的訪問日志:

   

復(fù)制代碼 代碼如下:

    127.0.0.1 - - [05/May/2011:10:54:07 +0800] "OPTIONS * HTTP/1.0" 200 -
    127.0.0.1 - - [05/May/2011:10:54:08 +0800] "OPTIONS * HTTP/1.0" 200 -
    127.0.0.1 - - [05/May/2011:10:54:09 +0800] "OPTIONS * HTTP/1.0" 200 -
    127.0.0.1 - - [05/May/2011:10:54:10 +0800] "OPTIONS * HTTP/1.0" 200 -


在Apache Prefork模式下, 啟動的時候,Apache就會fork出一些worker進程, 來準備接受請求, 這些worker進程,在完成準備工作以后, 就會進入block模式的監(jiān)聽沉睡中, 等待請求到來而被喚醒。

另外一方面, 在Prefork模式下, 當請求很多, 目前的worker進程數(shù)不夠處理的時候, 就會額外再fork一些worker進程出來, 以滿足當前的請求。

而在這些請求高峰過后, 如果額外fork出來的進程數(shù)大于了MaxSpareServers, Apache就會告訴這些worker進程退出, 那么問題就來了。

這些進程都在沉睡中啊, 怎么告訴他們, 并且讓他們自我退出呢?

Apache會首先發(fā)送一個退出狀態(tài)字(GRACEFUL_CHAR !)給這些Work進程:

   

復(fù)制代碼 代碼如下:
static apr_status_t pod_signal_internal(ap_pod_t *pod)
    {
        apr_status_t rv;
        char char_of_death = '!';
        apr_size_t one = 1;
    
        rv = apr_file_write(pod->pod_out, &char_of_death, &one);
        if (rv != APR_SUCCESS) {
            ap_log_error(APLOG_MARK, APLOG_WARNING, rv, ap_server_conf,
                         "write pipe_of_death");
        }
    
        return rv;
    }

但此時, Worker進程不會去讀這些狀態(tài)字, 因為他們還在沉睡。

這個時候Apache就會發(fā)送一個OPTIONS請求給自己, 喚醒這些沉睡的進程:

   

復(fù)制代碼 代碼如下:
static apr_status_t dummy_connection(ap_pod_t *pod)
    {
    //...有省略
        /* Create the request string. We include a User-Agent so that
         * adminstrators can track down the cause of the odd-looking
         * requests in their logs.
         */
        srequest = apr_pstrcat(p, "OPTIONS * HTTP/1.0\r\nUser-Agent: ",
                               ap_get_server_banner(),
                               " (internal dummy connection)\r\n\r\n", NULL);
    //...有省略
    }

這些進程在處理完當前請求以后(OPTIONS請求), 就會發(fā)現(xiàn), oh, 主進程讓我退出。

   

復(fù)制代碼 代碼如下:
static void child_main(int child_num_arg)
    {
    //...有省略
    
        while (!die_now && !shutdown_pending) {
    //...有省略
            //1. listen
            //2. accept
            //3. process request
    
            /* Check the pod and the generation number after processing a
             * connection so that we'll go away if a graceful restart occurred
             * while we were processing the connection or we are the lucky
             * idle server process that gets to die.
             */
            if (ap_mpm_pod_check(pod) == APR_SUCCESS) { /* selected as idle? */
                die_now = 1;
            }
    //...有省略
       }
    //...有省略
    }

于是, 它就做完清理工作, 然后自我消亡了~~~

相關(guān)文章

  • Linux虛擬機中node.js之開發(fā)環(huán)境搭建

    Linux虛擬機中node.js之開發(fā)環(huán)境搭建

    這篇文章主要介紹了Linux虛擬機中node.js之開發(fā)環(huán)境搭建,有需要的朋友可以了解一下。
    2016-11-11
  • Linux使用fdisk實現(xiàn)磁盤分區(qū)過程圖解

    Linux使用fdisk實現(xiàn)磁盤分區(qū)過程圖解

    這篇文章主要介紹了Linux使用fdisk實現(xiàn)磁盤分區(qū)過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • 在 Ubuntu 中使用 NTP 進行時間同步設(shè)置

    在 Ubuntu 中使用 NTP 進行時間同步設(shè)置

    本篇文章主要介紹了在 Ubuntu 中使用 NTP 進行時間同步設(shè)置,通??蛻舳讼蚍?wù)器請求當前的時間,并根據(jù)結(jié)果來設(shè)置其時鐘。
    2017-04-04
  • linux 定時任務(wù)詳解

    linux 定時任務(wù)詳解

    本篇文章主要介紹了linux 定時任務(wù),具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-01-01
  • Ubuntu 16.04/18.04 安裝Pycharm及Ipython的教程

    Ubuntu 16.04/18.04 安裝Pycharm及Ipython的教程

    這篇文章主要介紹了Ubuntu 16.04/18.04 安裝Pycharm及Ipython的教程,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • Linux中文本處理工具之cut命令詳解

    Linux中文本處理工具之cut命令詳解

    cut命令指定輸出一行中的選取部分。是大家在操作linux系統(tǒng)中經(jīng)常用到的命令,下面這篇文章主要給大家介紹了關(guān)于Linux中文本處理工具之cut命令的相關(guān)資料,需要的朋友可以參考學(xué)習(xí),下面來一起看看吧。
    2017-03-03
  • Linux之常見漏洞修復(fù)

    Linux之常見漏洞修復(fù)

    這篇文章主要介紹了Linux中的常見漏洞修復(fù),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Linux用if判斷目錄是否存在實例方法

    Linux用if判斷目錄是否存在實例方法

    在本篇文章中小編給各位整理的是關(guān)于Linux如何使用if判斷目錄是否存在的相關(guān)內(nèi)容,有需要的朋友們可以參考下。
    2020-03-03
  • CentOS 6.3安裝配置Weblogic-10方法

    CentOS 6.3安裝配置Weblogic-10方法

    這篇文章主要介紹了CentOS 6.3安裝配置Weblogic-10方法,需要的朋友可以參考下
    2014-11-11
  • Linux中大內(nèi)存頁Oracle數(shù)據(jù)庫優(yōu)化的方法

    Linux中大內(nèi)存頁Oracle數(shù)據(jù)庫優(yōu)化的方法

    這篇文章主要給大家介紹了關(guān)于Linux中大內(nèi)存頁Oracle數(shù)據(jù)庫優(yōu)化的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11

最新評論