RAM Probleme mit Apache

narak

narak

Mitglied
Thread Starter
Dabei seit
25.05.2006
Beiträge
62
Reaktionspunkte
0
Hallo,

ich habe bei 1&1 einen webserver zu laufen, doch leider macht der Apache bei größeren php skripten (in verbindung mit einer mysql datenbank) die grätsche. genauer gesagt, der RAM ist völlig ausgelastet und http requestst werden nicht weiter bearbeitet.

nachdem ich manuell einige httpd prozesse abgeschossen habe läuft dann wieder alles 1A, aber das ist keine lösung auf dauer.

die server-tuning.conf:
# prefork MPM
<IfModule prefork.c>
# number of server processes to start
StartServers 2
# minimum number of server processes which are kept spare
MinSpareServers 2
# maximum number of server processes which are kept spare
MaxSpareServers 5
# highest possible MaxClients setting for the lifetime of the Apache process.
ServerLimit 150
# maximum number of server processes allowed to start
MaxClients 15
# maximum number of requests a server process serves
MaxRequestsPerChild 100
</IfModule>
# worker MPM
<IfModule worker.c>
# initial number of server processes to start
StartServers 2
# minimum number of worker threads which are kept spare
MinSpareThreads 2
# maximum number of worker threads which are kept spare
MaxSpareThreads 5
# maximum number of simultaneous client connections
MaxClients 150
# constant number of worker threads in each server process
ThreadsPerChild 25
# maximum number of requests a server process serves
MaxRequestsPerChild 100
</IfModule>

# leader MPM
<IfModule leader.c>
# initial number of server processes to start
StartServers 2
# minimum number of worker threads which are kept spare
MinSpareThreads 2
# maximum number of worker threads which are kept spare
MaxSpareThreads 5
# maximum number of simultaneous client connections
MaxClients 150
# constant number of worker threads in each server process
ThreadsPerChild 25
# maximum number of requests a server process serves
MaxRequestsPerChild 100
</IfModule>

# perchild MPM
<IfModule perchild.c>
# constant number of server processes
NumServers 5
# initial number of worker threads in each server process
StartThreads 5
# minimum number of worker threads which are kept spare
MinSpareThreads 5
# maximum number of worker threads which are kept spare
MaxSpareThreads 10
# maximum number of worker threads in each server process
MaxThreadsPerChild 20
# maximum number of connections per server process
MaxRequestsPerChild 100

AcceptMutex fcntl
</IfModule>

# metux MPM
<IfModule metuxmpm.c>
# initial number of worker threads in each server process
StartThreads 2
# minimum number of worker threads which are kept spare
MinSpareThreads 5
# maximum number of worker threads which are kept spare
MaxSpareThreads 10
# maximum number of connections per server process
MaxRequestsPerChild 100

Multiplexer "wwwrun" "www"

</IfModule>

KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

die http.conf:
### Global Environment ######################################################
#
# The directives in this section affect the overall operation of Apache,
# such as the number of concurrent requests.

# run under this user/group id
Include /etc/apache2/uid.conf

# - how many server processes to start (server pool regulation)
# - usage of KeepAlive
Include /etc/apache2/server-tuning.conf

# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a <VirtualHost>
# container, error messages relating to that virtual host will be
# logged here. If you *do* define an error logfile for a <VirtualHost>
# container, that host's errors will be logged there and not here.
ErrorLog /var/log/apache2/error_log

# generated from APACHE_MODULES in /etc/sysconfig/apache2
Include /etc/apache2/sysconfig.d/loadmodule.conf

# IP addresses / ports to listen on
Include /etc/apache2/listen.conf

# predefined logging formats
Include /etc/apache2/mod_log_config.conf

# generated from global settings in /etc/sysconfig/apache2
Include /etc/apache2/sysconfig.d/global.conf

# optional mod_status, mod_info
Include /etc/apache2/mod_status.conf
Include /etc/apache2/mod_info.conf

# optional cookie-based user tracking
# read the documentation before using it!!
Include /etc/apache2/mod_usertrack.conf

# configuration of server-generated directory listings
Include /etc/apache2/mod_autoindex-defaults.conf

# associate MIME types with filename extensions
TypesConfig /etc/apache2/mime.types
DefaultType text/plain
Include /etc/apache2/mod_mime-defaults.conf

# set up (customizable) error responses
Include /etc/apache2/errors.conf

# global (server-wide) SSL configuration, that is not specific to
# any virtual host
Include /etc/apache2/ssl-global.conf


# forbid access to the entire filesystem by default
<Directory />
Options None
AllowOverride None
Order deny,allow
Deny from all
</Directory>

# use .htaccess files for overriding,
AccessFileName .htaccess
# and never show them
<Files ~ "^\.ht">
Order allow,deny
Deny from all
</Files>

# List of resources to look for when the client requests a directory
DirectoryIndex at_domains_index.html index.html index.shtml index.html.var index.cfm index.php index.htm

### 'Main' server configuration
Include /etc/apache2/default-server.conf
Include /etc/apache2/sysconfig.d/include.conf


### Virtual server configuration
Include /etc/apache2/vhosts.d/*.conf



vllt kann mir jemand weiterhelfen?

liebe grüße
narak
 
Also das ist eigentlich unmöglich.

Ein Dienst wie Apache, und sollte er auch zusätzlich mit PHP und mySQL arbeiten müssen, bringt nicht den Arbeitsspeicher eines Servers zum Erliegen.

Und wenn, dann ist es an den Experten von 1&1, dir eine angemessene Hardware zur Verfügung zu stellen.

An deiner Stelle würde ich dann mal den Anbieter wechseln oder auf normalen Webspace mit PHP und mySQL umsteigen.
 
der server ist mit einem 12 monats vertrag angemietet, da muss ich noch durch :rolleyes:


ich denke dass es einfach an den einstellungen liegt, doch da komme ich nicht weiter. :(

gruß
narak
 
An der Apache-Web-Server-Konfig kann es einfach nicht liegen, weil diese Einstellungen unterhalb der Rechtsebene der Verwaltung der Betriebssoftware (Systemsoftware) liegt.

Bevor der Apache irgendwie den RAM eines Rechners überbeansprucht, wird dieser Dienst vom System automatisch in die Schranken verwiesen.

Was mir nicht ganz gefällt, ist eine der Anweisungen hier in deiner httpd.conf:

<Directory />
Options None
AllowOverride None
Order deny,allow
Deny from all
</Directory>

Das bedeutet ja, dass niemand auf deinen Webspace Zugriff erhält. So wird also niemandem je eine Webseite in deinem Root-Verzeichnis angezeigt.
Es sollte dann schon eher so aussehen:

<Directory />
Options All
AllowOverride All
Order deny,allow
Allow from all
</Directory>

Wer die Webseiten nicht besuchen darf, für den fügst du die IP nachträglich in einer .htaccess-Datei ein:

Order deny,allow
Deny from 72.68.19.3 (Beispiel)
Allow from all
 
es läuft aber mit diesen einstellungen :rolleyes:


könnte das ram probem evtl am mysqld liegen? der hat ne menge prozesse erzeugt die recht viel ram reservieren...

-siehe screenshot-
 

Anhänge

  • plesk.jpg
    plesk.jpg
    63,3 KB · Aufrufe: 67
guck mal in deine php.ini, da kann man den RAM hunger von php skripten begrenzen...

und mal in die my.cnf ...
wie viele mysql lässt du denn da zu?
da steht doch extra cpu anzahl *2
 
oneOeight schrieb:
wie viele mysql lässt du denn da zu?
da steht doch extra cpu anzahl *2

kannst du mir sagen wo ich das begrenzen kann?

EDIT:

my.cnf:
# The MySQL server
[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
thread_concurrency=2
[safe_mysqld]
err-log=/var/lib/mysql/mysqld.log

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[isamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout
162,19 Bot
 
poste doch deine php.ini noch mal (genau schauen, dass es die richtige ist, manchmal hat man mehrere auf dem server liegen)
 
Code:
max_execution_time = 90     ; Maximum execution time of each script, in seconds
max_input_time = 90     ; Maximum amount of time each script may spend parsing request data
memory_limit = 64M

error_reporting  =  E_ALL & ~E_NOTICE

display_errors = On

display_startup_errors = Off

log_errors = Off

log_errors_max_len = 1024

ignore_repeated_errors = Off

reicht das als auszug?
 
Also ich glaube, hier will uns jemand verkackeiern ...

Wozu mietest du dir einen Server bei 1&1 für 1 Jahr, wenn du es hier nicht mal fertig bringst, deine gesamte php.ini als Anhang einzufügen?

Und außerdem, wenn du einen Mac mit Mac OS X verwendest, wüßtest du, dass du dort im Grunde einen eigenen Webserver dabei hast. Damit kann man schon etwas mehr als nur testen wenn man es richtig anstellt. PHP ist auch dabei und sogar ein Modul für Perl/CGI und WebDAV. PHP 5 wird nachinstalliert und auch mySQL und fertig.

Und du mietest dir für mehrere Euro monatlich einen Server bei 1&1 und weißt gar nicht damit umzugehen? Verstehe ich nicht. Wäre mir persönlich zum Rumspielen irgendwie zu teuer. :mad:
 
ich will euch mit sicherheit nicht "verkackeiern". auf meinem alten pII 233 hab ich schon erfolgreich suse+apache+php+mysql installiert, und mein kumpel mit dem ich zusammen den server betreibe hat davon auch ne menge ahnung. nur leider hat der server bei 1&1 nur etwas um die 100MB ram (glaube ich), worauf wir beim mieten nicht geachtet haben. da ich teilweise 8mb große xml dateien parse und in eine db schreibe, habe ich teilweise extrem hohe cpu+ram last.

gruß
narak
 

Anhänge

  • php.ini.txt
    37,5 KB · Aufrufe: 57
so, hab jetzt auch mal ps aufx und top abgerufen, vllt hilft das ja weiter :rolleyes:

sorry für den doppelpost, konnte leider die anhänge nicht editieren.
 

Anhänge

  • top.txt
    7,5 KB · Aufrufe: 74
Und das sagst du mal eben erst jetzt?

Das Betriebssystem solch eines Gerätes braucht ja schon fast 100 MB RAM.
Da ist kein Arbeitsspeicher mehr für andere Applicationen frei. Da muß man froh sein, wenn noch ein Terminal oder eine Console drauf läuft.

Also mal im Ernst, ohne da den RAM aufzurüsten, ist nichts zu machen. Nicht im Guten und nicht im Bösen. Das hätte dir hier aber auch jeder andere gesagt, wenn du gleich den RAM-Status genannt hättest.
 
also du tuest dir erstmal einen gefallen indem du
mysql.allow_persistent = On
setzt... dann macht php nicht immer gleich eine neue verbindung zu mysql auf, sondern benutzt die bestehenden weiter...

das mit der thread_concurrency stimmt schon mit 2...
 
@one:
persistente verbindungen werden eigtl nicht genutzt, ich hab auch schon von mehreren gehört dass das gut so ist die deaktiviert zu haben.

@toertel:
ich versuch jetzt aber das beste draus zu machen. nach'm starten des servers werden nur 65% des ram's genutzt, also für nen forum o.ä. hab ich genug spielraum.
 
Setz mal in der php.ini das memory_limit auf 32 oder 16m. Damit sollte schon etwas an resourcen gespart werden.

In der server-turning.conf

folgendes Ändern:


# prefork MPM
<IfModule prefork.c>
# number of server processes to start
StartServers 4
# minimum number of server processes which are kept spare
MinSpareServers 1
# maximum number of server processes which are kept spare
MaxSpareServers 8
# highest possible MaxClients setting for the lifetime of the Apache process.
ServerLimit 100
# maximum number of server processes allowed to start
MaxClients 15
# maximum number of requests a server process serves
MaxRequestsPerChild 70
</IfModule>
 
hallo,

ich hab es jetzt einigermassen in den griff bekommen, was mir jedoch immer mal wieder uaffält sind httpd prozesse deren time recht hoch ist, kann mir dazu jemand etwas sagen?

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 604 244 ? Ss 11:23 0:00 init
root 25674 0.0 0.0 1456 640 ? Ss 11:23 0:00 /sbin/syslogd -a /var/lib/named/dev/log -a /var/lib/ntp/dev/log -a /var/lib
root 25680 0.0 0.0 3984 1044 ? Ss 11:23 0:00 /usr/sbin/saslauthd -n 2 -a pam
root 25681 0.0 0.0 3984 1040 ? S 11:23 0:00 \_ /usr/sbin/saslauthd -n 2 -a pam
root 25710 0.0 0.0 4788 1828 ? Ss 11:23 0:00 /usr/sbin/sshd -o PidFile=/var/run/sshd.init.pid
root 18733 0.1 0.0 9352 2860 ? Ss 15:37 0:00 \_ sshd: root@pts/0
root 18739 0.3 0.0 2836 1740 pts/0 Ss 15:37 0:00 \_ -bash
root 18766 0.0 0.0 2372 836 pts/0 R+ 15:37 0:00 \_ ps aufx
root 25716 0.0 0.0 2076 932 ? Ss 11:23 0:00 /usr/sbin/xinetd
named 25763 0.0 0.0 12064 2920 ? Ss 11:23 0:00 /usr/sbin/named -t /var/lib/named -u named
named 25764 0.0 0.0 12064 2920 ? S 11:23 0:00 \_ /usr/sbin/named -t /var/lib/named -u named
named 25765 0.0 0.0 12064 2920 ? S 11:23 0:00 \_ /usr/sbin/named -t /var/lib/named -u named
named 25766 0.0 0.0 12064 2920 ? S 11:23 0:00 \_ /usr/sbin/named -t /var/lib/named -u named
named 25767 0.0 0.0 12064 2920 ? S 11:23 0:00 \_ /usr/sbin/named -t /var/lib/named -u named
root 25778 0.0 0.0 2372 1136 ? S 11:23 0:00 /bin/sh /usr/bin/mysqld_safe --user=mysql --pid-file=/var/lib/mysql/mysqld.
mysql 25812 0.0 0.5 94164 23472 ? S 11:23 0:00 \_ /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql -
mysql 25813 0.0 0.5 94164 23472 ? S 11:23 0:00 \_ /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mys
mysql 25814 0.0 0.5 94164 23472 ? S 11:23 0:00 \_ /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user
mysql 25815 0.0 0.5 94164 23472 ? S 11:23 0:00 \_ /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user
mysql 25816 0.0 0.5 94164 23472 ? S 11:23 0:00 \_ /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user
mysql 25817 0.0 0.5 94164 23472 ? S 11:23 0:00 \_ /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user
mysql 25820 0.0 0.5 94164 23472 ? S 11:23 0:02 \_ /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user
mysql 25821 0.0 0.5 94164 23472 ? S 11:23 0:01 \_ /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user
mysql 25822 0.0 0.5 94164 23472 ? S 11:23 0:00 \_ /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user
mysql 25823 0.0 0.5 94164 23472 ? S 11:23 0:00 \_ /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user
mysql 25850 0.0 0.5 94164 23472 ? S 11:23 0:11 \_ /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user
mysql 25908 0.0 0.5 94164 23472 ? S 11:23 0:03 \_ /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user
mysql 7824 0.0 0.5 94164 23472 ? S 12:22 0:03 \_ /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user
mysql 30741 0.0 0.5 94164 23472 ? S 14:15 0:01 \_ /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user
mysql 826 0.0 0.5 94164 23472 ? S 14:17 0:01 \_ /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user
mysql 1927 0.0 0.5 94164 23472 ? S 14:28 0:01 \_ /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user
mysql 18549 0.0 0.5 94164 23472 ? S 15:34 0:00 \_ /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user
mysql 18550 0.0 0.5 94164 23472 ? S 15:34 0:00 \_ /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user
qmails 25826 0.0 0.0 1436 388 ? S 11:23 0:00 qmail-send
qmaill 25828 0.0 0.0 1392 448 ? S 11:23 0:00 \_ splogger qmail
root 25829 0.0 0.0 1392 348 ? S 11:23 0:00 \_ qmail-lspawn ./Maildir/
qmailr 25830 0.0 0.0 1388 364 ? S 11:23 0:00 \_ qmail-rspawn
qmailq 25831 0.0 0.0 1380 320 ? S 11:23 0:00 \_ qmail-clean
root 25902 0.0 0.3 29936 13048 ? Ss 11:23 0:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun 11553 0.8 0.3 32352 16432 ? S 12:39 1:32 \_ /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun 24504 1.3 0.4 33516 16540 ? S 13:43 1:30 \_ /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun 26804 0.0 0.3 30164 13816 ? S 13:46 0:00 \_ /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun 26909 0.0 0.4 32432 16516 ? S 13:47 0:03 \_ /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun 759 3.6 0.4 32540 16584 ? S 14:15 3:00 \_ /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun 13207 0.0 0.3 32240 16312 ? S 15:13 0:01 \_ /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun 16529 0.0 0.3 32240 16300 ? S 15:24 0:00 \_ /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
wwwrun 18333 0.0 0.3 32256 16244 ? S 15:30 0:00 \_ /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf
root 25914 0.0 0.1 47376 4744 ? Ss 11:23 0:00 /usr/local/psa/admin/bin/httpsd
psaadm 25917 0.0 0.2 50492 11868 ? S 11:23 0:00 \_ /usr/local/psa/admin/bin/httpsd
psaadm 18548 0.0 0.3 51432 14104 ? S 15:34 0:00 \_ /usr/local/psa/admin/bin/httpsd
root 26000 0.0 0.0 1668 752 ? Ss 11:23 0:00 /usr/sbin/cron

liebe grüße
narak
 
Toertel schrieb:
Und das sagst du mal eben erst jetzt?

Das Betriebssystem solch eines Gerätes braucht ja schon fast 100 MB RAM.
Da ist kein Arbeitsspeicher mehr für andere Applicationen frei. Da muß man froh sein, wenn noch ein Terminal oder eine Console drauf läuft.

Also mal im Ernst, ohne da den RAM aufzurüsten, ist nichts zu machen. Nicht im Guten und nicht im Bösen. Das hätte dir hier aber auch jeder andere gesagt, wenn du gleich den RAM-Status genannt hättest.


Diese Aussage ist, wie so einige Andere von Dir hier im thread , leider technisch völlig falsch ( und gleicht sich damit Deinem Tonfall an :( ).
 
narak schrieb:
ich hab es jetzt einigermassen in den griff bekommen, was mir jedoch immer mal wieder uaffält sind httpd prozesse deren time recht hoch ist, kann mir dazu jemand etwas sagen?

Wie httpd-Prozesse in Zahl und lifetime limitiert werden hast Du hier ja schon gelernt (httpd.conf). Warum passiert dann trotzdem noch was? Nun httpd endet erst, wenn er nichts mehr zu tun hat, heißt also er hat noch etwas zu tun! Einige Deiner Skripte generieren mit Sicherheit zuviel Last oder gar Endlosschleifen! Im Extremfall kann man damit das gesamte physische RAM ( inklusive Swap) bis auf das letzte Byte konsumieren und der Server steht!

Zumindest 1x hab ich das auch schon geschafft! Du solltest daher versuchen einen Zusammenhang zwischen PHP-Skripten und der Last zu finden! Der Mechanismus über das forken und beenden von http's funktioniert sehr zuverlässig, der wird es wohl nicht sein; schon gar nicht auf einer 1&1 Maschine!
 
hallo wegus,

mein gedanke war, die lebenszeit der prozesse möglichst gering zu halten, damit möglichst wenig ram auch im idle verbraucht wird. auf dem server läuft ein wbb2 forum (35 nutzer), 3-4 statische webseiten (pearl/html/php) sowie ein datenbank tool welches nur gelegentlich (3-4 tage im monat) läuft, aber dann auf hochtouren mit vielen insert/update anfragen via sql.
dazu hab ich ServerLimit und MaxRequestsPerClient reduziert.


leider hab ich noch ein kleines verständnis problem was den zeit-parameter angeht. die meisten httpd prozessen bleiben bei 0-5 sec, jedoch gibt es immer wieder mal prozesse die bei genau 1:30 min oder 3:00 min "stehen" bleiben. und genau diese prozesse existieren für eine ganze weile, wobei einer ~15MB frisst, nicht viel, aber bei verfügbaren 80MB ne menge *seufz*


das mit den skripten werd ich mal in angriff nehmen, wobei ich nicht denke dass ich da (mit php) endlos schleifen programmiert habe, die webseite läuft nämlich reibungslos.


liebe grüße
narak
 
Zurück
Oben Unten