apache2: hohe auslastung

_dp

New Member
Hallo!

Heute liefen meine Seiten die ich auf dem Rootserver betreibe sehr langsam und ich habe bemerkt, dass die Auslastung mehrer Apache Prozesse sehr hoch ist.

Das sieht im top der shell zeitweise so aus:

Code:
Cpu(s): 89.8%us,  9.2%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.3%hi,  0.7%si,  0.0%st
Mem:   1816640k total,  1709680k used,   106960k free,    63076k buffers
Swap:  3903752k total,    11532k used,  3892220k free,  1030340k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
30552 www-data  15   0 30780  10m 4880 S   21  0.6   0:16.07 apache2
26784 www-data  16   0 35704  14m 5732 R   19  0.8   0:46.52 apache2
31005 www-data  16   0 34392  13m 4784 R   18  0.8   0:04.22 apache2
29520 www-data  15   0 35612  14m 5316 R   17  0.8   0:23.64 apache2
29916 www-data  15   0 34508  14m 5404 R   16  0.8   0:18.60 apache2
29555 www-data  15   0 31964  11m 5340 S   15  0.6   0:32.93 apache2
31015 www-data  15   0 34392  13m 4784 R   14  0.8   0:03.80 apache2
29972 www-data  15   0 32036  11m 5376 S   13  0.6   0:03.48 apache2
 2194 mysql     15   0  136m  59m 5852 S   12  3.4 823:26.25 mysqld
29975 www-data  15   0 30716  10m 4880 S   12  0.6   0:10.66 apache2
29352 www-data  15   0 30788  10m 4940 S   10  0.6   0:31.61 apache2
30614 www-data  15   0 30796  10m 4896 S   10  0.6   0:06.14 apache2
30468 www-data  15   0 30884  10m 4844 S   10  0.6   0:07.97 apache2
30616 www-data  15   0 37636  16m 5228 R    7  0.9   0:00.21 apache2
29544 www-data  15   0 32016  11m 5708 S    4  0.6   0:03.53 apache2
13854 hlds      15   0  250m 151m  20m S    1  8.6   9:52.73 srcds_i486
30590 www-data  15   0 32236  11m 5704 S    0  0.6   0:00.59 apache2
    1 root      15   0  1948  648  552 S    0  0.0   0:07.58 init
    2 root      RT   0     0    0    0 S    0  0.0   0:00.73 migration/0
    3 root      34  19     0    0    0 R    0  0.0   0:00.17 ksoftirqd/0
    4 root      RT   0     0    0    0 S    0  0.0   0:14.20 migration/1
...

Das ist natürlich nicht normal.

Dann habe ich mit tail -f mal die apache access.log files mitlaufen lassen, wo mir aufgefallen ist, dass jeder Eintrag genau so aussieht:

Code:
::1 - - [27/Nov/2009:23:29:19 +0100] "GET / HTTP/1.0" 302 421 "-" "Apache/2.2.3 (Debian) mod_jk/1.2.18 mod_python/3.2.10 Python/2.4.4 PHP/5.2.0-8+etch11 mod_ssl/2.2.3 OpenSSL/0.9.8c mod_perl/2.0.2 Perl/v5.8.8 (internal dummy connection)"
::1 - - [27/Nov/2009:23:29:20 +0100] "GET / HTTP/1.0" 302 421 "-" "Apache/2.2.3 (Debian) mod_jk/1.2.18 mod_python/3.2.10 Python/2.4.4 PHP/5.2.0-8+etch11 mod_ssl/2.2.3 OpenSSL/0.9.8c mod_perl/2.0.2 Perl/v5.8.8 (internal dummy connection)"
::1 - - [27/Nov/2009:23:29:21 +0100] "GET / HTTP/1.0" 302 421 "-" "Apache/2.2.3 (Debian) mod_jk/1.2.18 mod_python/3.2.10 Python/2.4.4 PHP/5.2.0-8+etch11 mod_ssl/2.2.3 OpenSSL/0.9.8c mod_perl/2.0.2 Perl/v5.8.8 (internal dummy connection)"
::1 - - [27/Nov/2009:23:29:22 +0100] "GET / HTTP/1.0" 302 421 "-" "Apache/2.2.3 (Debian) mod_jk/1.2.18 mod_python/3.2.10 Python/2.4.4 PHP/5.2.0-8+etch11 mod_ssl/2.2.3 OpenSSL/0.9.8c mod_perl/2.0.2 Perl/v5.8.8 (internal dummy connection)"

Die Maschine wird von PLESK betrieben und bisher ist der Server super rund gelaufen und ich kam mit den meisten Problemen klar.

Nur diesmal brauche ich Hilfe, das habe ich so noch nicht gesehen.

Auf was lässt dieses Verhalten vermuten? Eine DDoS Attacke?

Wie gehe ich am schlausten dagegen vor, vor allem wenn die Logs so ungewohnt wenig sagen?


mfg dp
 
Hallo und willkommen an Board!

Du würdest etwas mehr über Deine Prozesse erfahren, wenn Du mod_status mit "ExtendedStatus On" aktivierst.

Wir könnten Dir auch noch Tipps geben, wenn Du uns Deinen Server-Einstellungen vom Apache zeigst. Also alles rund um MaxClients und KeepAlive.

Den Teil aus Deinem Logfile ist ein "internal Dummy-Request". Er dient dem Apache dazu seine Kinder zu wecken damit sie sich ggf. selber beenden.

huschi.
 
Hi

Ich hab mir mal Mühe gegeben und alle langen Kommentarblocks rausgeschmissen, aber hier ist die apache2.conf die großenteils durch PLESK vorgeneriert wurde und ich bisher nur sehr geringfügig darin Änderungen vornehmen musste

Code:
ServerRoot "/etc/apache2"

LockFile /var/lock/apache2/accept.lock

PidFile /var/run/apache2.pid

Timeout 300

KeepAlive On

MaxKeepAliveRequests 100

KeepAliveTimeout 15

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_worker_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75 
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>

User www-data
Group www-data

AccessFileName .htaccess

<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
</Files>

TypesConfig /etc/mime.types

DefaultType text/plain

HostnameLookups Off

ErrorLog /var/log/apache2/error.log

LogLevel warn

# Include module configuration:
Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf

# Include all the user configurations:
Include /etc/apache2/httpd.conf

# Include ports listing
Include /etc/apache2/ports.conf

# Include generic snippets of statements
Include /etc/apache2/conf.d/

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

ServerTokens Full

ServerSignature On

<IfModule alias_module>
    Alias /icons/ "/usr/share/apache2/icons/"

    <Directory "/usr/share/apache2/icons">
        Options Indexes MultiViews
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>

</IfModule>

#
# Directives controlling the display of server-generated directory listings.
#
<IfModule mod_autoindex.c>

    IndexOptions FancyIndexing VersionSort HTMLTable NameWidth=*

    AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

    AddIconByType (TXT,/icons/text.gif) text/*
    AddIconByType (IMG,/icons/image2.gif) image/*
    AddIconByType (SND,/icons/sound2.gif) audio/*
    AddIconByType (VID,/icons/movie.gif) video/*

    AddIcon /icons/binary.gif .bin .exe
    AddIcon /icons/binhex.gif .hqx
    AddIcon /icons/tar.gif .tar
    AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
    AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
    AddIcon /icons/a.gif .ps .ai .eps
    AddIcon /icons/layout.gif .html .shtml .htm .pdf
    AddIcon /icons/text.gif .txt
    AddIcon /icons/c.gif .c
    AddIcon /icons/p.gif .pl .py
    AddIcon /icons/f.gif .for
    AddIcon /icons/dvi.gif .dvi
    AddIcon /icons/uuencoded.gif .uu
    AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
    AddIcon /icons/tex.gif .tex
    AddIcon /icons/bomb.gif core

    AddIcon /icons/back.gif ..
    AddIcon /icons/hand.right.gif README
    AddIcon /icons/folder.gif ^^DIRECTORY^^
    AddIcon /icons/blank.gif ^^BLANKICON^^

    #
    # DefaultIcon is which icon to show for files which do not have an icon
    # explicitly set.
    #
    DefaultIcon /icons/unknown.gif

    ReadmeName README.html
    HeaderName HEADER.html

    #
    # IndexIgnore is a set of filenames which directory indexing should ignore
    # and not include in the listing.  Shell-style wildcarding is permitted.
    #
    IndexIgnore .??* *~ *# RCS CVS *,v *,t 
</IfModule>

<IfModule mod_mime.c>

    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz

    AddLanguage ca .ca
    AddLanguage cs .cz .cs
    AddLanguage da .dk
    AddLanguage de .de
    AddLanguage el .el
    AddLanguage en .en
    AddLanguage eo .eo
    AddLanguage es .es
    AddLanguage et .et
    AddLanguage fr .fr
    AddLanguage he .he
    AddLanguage hr .hr
    AddLanguage it .it
    AddLanguage ja .ja
    AddLanguage ko .ko
    AddLanguage ltz .ltz
    AddLanguage nl .nl
    AddLanguage nn .nn
    AddLanguage no .no
    AddLanguage pl .po
    AddLanguage pt .pt
    AddLanguage pt-BR .pt-br
    AddLanguage ru .ru
    AddLanguage sv .sv
    AddLanguage zh-CN .zh-cn
    AddLanguage zh-TW .zh-tw
</IfModule>

<IfModule mod_negotiation.c>
    LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW

    ForceLanguagePriority Prefer Fallback

</IfModule>

<IfModule mod_mime.c>
    AddCharset us-ascii    .ascii .us-ascii
    AddCharset ISO-8859-1  .iso8859-1  .latin1
    AddCharset ISO-8859-2  .iso8859-2  .latin2 .cen
    AddCharset ISO-8859-3  .iso8859-3  .latin3
    AddCharset ISO-8859-4  .iso8859-4  .latin4
    AddCharset ISO-8859-5  .iso8859-5  .cyr .iso-ru
    AddCharset ISO-8859-6  .iso8859-6  .arb .arabic
    AddCharset ISO-8859-7  .iso8859-7  .grk .greek
    AddCharset ISO-8859-8  .iso8859-8  .heb .hebrew
    AddCharset ISO-8859-9  .iso8859-9  .latin5 .trk
    AddCharset ISO-8859-10  .iso8859-10  .latin6
    AddCharset ISO-8859-13  .iso8859-13
    AddCharset ISO-8859-14  .iso8859-14  .latin8
    AddCharset ISO-8859-15  .iso8859-15  .latin9
    AddCharset ISO-8859-16  .iso8859-16  .latin10
    AddCharset ISO-2022-JP .iso2022-jp .jis
    AddCharset ISO-2022-KR .iso2022-kr .kis
    AddCharset ISO-2022-CN .iso2022-cn .cis
    AddCharset Big5        .Big5       .big5 .b5
    AddCharset cn-Big5     .cn-big5
    # For russian, more than one charset is used (depends on client, mostly):
    AddCharset WINDOWS-1251 .cp-1251   .win-1251
    AddCharset CP866       .cp866
    AddCharset KOI8      .koi8
    AddCharset KOI8-E      .koi8-e
    AddCharset KOI8-r      .koi8-r .koi8-ru
    AddCharset KOI8-U      .koi8-u
    AddCharset KOI8-ru     .koi8-uk .ua
    AddCharset ISO-10646-UCS-2 .ucs2
    AddCharset ISO-10646-UCS-4 .ucs4
    AddCharset UTF-7       .utf7
    AddCharset UTF-8       .utf8
    AddCharset UTF-16      .utf16
    AddCharset UTF-16BE    .utf16be
    AddCharset UTF-16LE    .utf16le
    AddCharset UTF-32      .utf32
    AddCharset UTF-32BE    .utf32be
    AddCharset UTF-32LE    .utf32le
    AddCharset euc-cn      .euc-cn
    AddCharset euc-gb      .euc-gb
    AddCharset euc-jp      .euc-jp
    AddCharset euc-kr      .euc-kr
    #Not sure how euc-tw got in - IANA doesn't list it???
    AddCharset EUC-TW      .euc-tw
    AddCharset gb2312      .gb2312 .gb
    AddCharset iso-10646-ucs-2 .ucs-2 .iso-10646-ucs-2
    AddCharset iso-10646-ucs-4 .ucs-4 .iso-10646-ucs-4
    AddCharset shift_jis   .shift_jis .sjis

    AddHandler type-map var

    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
</IfModule>

<IfModule mod_setenvif.c>
    #
    # The following directives modify normal HTTP response behavior to
    # handle known problems with browser implementations.
    #
    BrowserMatch "Mozilla/2" nokeepalive
    BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
    BrowserMatch "RealPlayer 4\.0" force-response-1.0
    BrowserMatch "Java/1\.0" force-response-1.0
    BrowserMatch "JDK/1\.0" force-response-1.0

    BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
    BrowserMatch "MS FrontPage" redirect-carefully
    BrowserMatch "^WebDrive" redirect-carefully
    BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully
    BrowserMatch "^gnome-vfs/1.0" redirect-carefully
    BrowserMatch "^XML Spy" redirect-carefully
    BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully
</IfModule>

#<IfModule mod_status.c>
    #
    # Allow server status reports generated by mod_status,
    # with the URL of http://servername/server-status
    # Change the ".example.com" to match your domain to enable.
    #
    #<Location /server-status>
    #    SetHandler server-status
    #    Order deny,allow
    #    Deny from all
    #    Allow from .example.com
    #</Location>
#</IfModule>

#<IfModule mod_info.c>
    #
    # Allow remote server configuration reports, with the URL of
    #  http://servername/server-info (requires that mod_info.c be loaded).
    # Change the ".example.com" to match your domain to enable.
    #
    #<Location /server-info>
    #    SetHandler server-info
    #    Order deny,allow
    #    Deny from all
    #    Allow from .example.com
    #</Location>
#</IfModule>

# Include the virtual host configurations:
Include /etc/apache2/sites-enabled/
AddOutputFilter INCLUDES .shtml
AddType text/html .shtml
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

Die httpd.conf ist bei mir übrigens leer, weil schon viele mich gefragt haben was darin steht.

Das mod_status habe ich zwar dort gefunden, aber die von dir angesprochene einstellung kann ich nicht finden, also scheint sie bei mir auf default zu stehen.
Wenn ich das richtig verstehe, scheint das aber etwas nützliches zu sein in meinem Fall. Wo genau muss ich die eintragen? in den <IfModule mod_status.c> block?
Eine config datei zur mod_status habe ich auf dem server nicht finden können.

Was die dummy logeinträge angeht:
Ich kenne das von einem anderen webserver, den ich vorher als co-admin mit einem etwas bewanderterem admin mitbetrieben habe, dass in der access.log die einträge mit ip adresse, request-url, antwort-code etc. stehen. die vermisse ich auf diesem server noch.
 
KeepAliveTimeout 15
Sowas kann den Server aus bremsen. Im Allgemeinen reichen hier 1 bis 2 Sekunden.

MaxClients 150
Dein Server 1.8 GB Speicher, die Apache-Prozesse belegen ca. 14 MB Daten-Speicher. Bei voller Auslastung mit 150 Threads gehen hier 2100 MB drauf. Ergo kann Dein Apache das System zum swappen zwingen, was meist tödlich ausgeht.

Die httpd.conf ist bei mir übrigens leer
Die Datei ist ein Überbleibsel aus dem Ursprung des Apache. Ist aktuell synonym zur Summe aller Konfigurationsdateien des Indianers.

in den <IfModule mod_status.c> block?
Ja.
Und das Modul aktivierst Du mit "a2enmod status".

dass in der access.log die einträge mit ip adresse, request-url, antwort-code etc. stehen. die vermisse ich auf diesem server noch.
Sorry, verstehe Dein Problem an dieser Stelle nicht.

huschi.
 
Hi

das mod_status erscheint bei mir bereits in der phpinfo, also geh ich mal davon aus dass das installiert und aktiviert ist.

Was ich mit dem Logfile meinte ist dies, dass ich auf einem anderen server folgende log einträge finde:

Code:
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)"

Auf diesem Server gibt es aber nur diesen Eintrag:
Code:
::1 - - [27/Nov/2009:23:29:19 +0100] "GET / HTTP/1.0" 302 421 "-" "Apache/2.2.3 (Debian) mod_jk/1.2.18 mod_python/3.2.10 Python/2.4.4 PHP/5.2.0-8+etch11 mod_ssl/2.2.3 OpenSSL/0.9.8c mod_perl/2.0.2 Perl/v5.8.8 (internal dummy connection)"
Der viel nichtssagender ist da mir die ganzen Infos zur IP, Request, querystring, ect. fehlen.

Wie bring ich meinem Webserver also bei das obige Format zu schreiben?
Im apache2.conf ist doch schon das richtige Format gewählt.
 
Dann solltest Du einfach mal ins richtige access_log schauen. ;)
Die findest Du pro Web im Verzeichnis statistics/log/.

huschi.
 
Ah, mensch bin ich blöd ^^

Vielen Dank, das hab ich gesucht. Und gleich mal nen Java-Scraper ausgesperrt und siehe da, alles läuft wieder :D

Der Alte Webserver hat die Logs halt direkt in den access.log geschrieben, aber bei PLESK gibt es demnach dann auch für jeden vhost einen eigenen. Ist ja auch logisch wenn man drüber nachdenkt ;)
 
Back
Top