簡體   English   中英

'/usr/sbin/apache2 -k start' 進程太多

[英]Too many '/usr/sbin/apache2 -k start' processes

我遇到了在 HTOP 中可見的 apache 進程(/usr/sbin/apache2 -k start)的問題。 在此處輸入圖像描述每次刷新或來自客戶端的連接后,進程數都會增加而不會停止運行。 即使瀏覽器關閉,該過程也會繼續。 在每個與數據庫連接的 php 頁面中,我以:

    $thread_id = $mysqli->thread_id;
    $mysqli->kill($thread_id);
    $mysqli->close(); 

過了一會兒,我的樹莓派 3 運行非常緩慢,實際上太熱了。 我使用默認設置默認安裝了 apache。

Server version: Apache/2.4.38 (Raspbian)
Server built:   2019-10-15T19:53:42
Server's Module Magic Number: 20120211:84
Server loaded:  APR 1.6.5, APR-UTIL 1.6.1
Compiled using: APR 1.6.5, APR-UTIL 1.6.1
Architecture:   32-bit
Server MPM:     prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/etc/apache2"
 -D SUEXEC_BIN="/usr/lib/apache2/suexec"
 -D DEFAULT_PIDLOG="/var/run/apache2.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="mime.types"
 -D SERVER_CONFIG_FILE="apache2.conf"

在 mpm_prefork.conf 文件中,我有:

<IfModule mpm_prefork_module>
    StartServers        4
    MinSpareServers     1
    MaxSpareServers     4
    MaxRequestWorkers   50
    MaxConnectionsPerChild  0
</IfModule>

在客戶端離開頁面或關閉瀏覽器后,我可以做什么或設置自動終止這些進程? 或者 apache 中是否有任何設置可以防止這種行為?

提前致謝!

默認的 Apache 多進程模式是 CPU 密集型基於 Fork 的 model。 這意味着隨着請求數量的增加,Apache 啟動的進程數量( http2 )也會增加。 分叉是 CPU 密集型的,很容易壓倒 Pi。 要使用更高效的多進程 model,請嘗試mpm_worker_module ,因為它使用線程來處理增加的吞吐量,並且可以通過配置限制父進程的數量。

有關 Apache2 的 MPM 選項的更多信息, 請參閱本文檔的“選擇 MPM”部分

默認的prefork模塊:

prefork MPM 使用多個子進程,每個子進程都有一個線程。 每個進程一次處理一個連接。 在許多系統上,prefork 的速度與 worker 相當,但它使用更多的 memory。 Prefork 的無線程設計在某些情況下比 worker 有優勢:它可以與非線程安全的第三方模塊一起使用,並且在線程調試支持較差的平台上更容易調試。

建議的worker模塊:

worker MPM 使用多個子進程,每個子進程有很多線程。 每個線程一次處理一個連接。 Worker 通常是高流量服務器的不錯選擇,因為它的 memory 占用空間比 prefork MPM 小。

這是一個可能有效的示例配置:

<IfModule mpm_worker_module>
    ServerLimit          2 # how many processes max?
    StartServers         1 # how many processes start initially?
    MaxRequestWorkers   40 # maximum total number of threads that may be launched
    MinSpareThreads     25
    MaxSpareThreads     75
    ThreadsPerChild     20 # number of threads deployed by each child process
</IfModule>

請注意,您的 Apache2 安裝必須使用您打算使用的 MPM 進行編譯。 文檔對此有更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM