# Apache/MySQL-Optimierung gesucht



## schmidtedv (3. Aug. 2008)

Ich habe hier einen PIII 733Mhz mit 256MB Ram am Start und bin dem Debian Etch HowTo mit anschließendem ISPConfig-Setup gefolgt. Nun wird der server hauptsächlich für das Hosten meiner Webseite und eines phpBB-Forums genutzt werden und es läuft ein kleiner teamspeak-server mit 10 zugängen.

Könnte mir jemand bei der apache, MySQL und eventuell php-Optimierung etwas helfen? Ich habe viele Beispiele im Internet gefunden aber alle gehen von stärkeren Systemen aus.

Ich erwarte etwa 10 gleichzeitige Besucher maximal und im forum kann es zu etwa 20 gleichzeitigen querries kommen (laut footer). 

PHP scheint das forum wesentlich langsamer aufzubauen als bei mir zu hause, wenn ich es aufrufe, daher hier meine bitte um hilfe. vielleicht habe ich in php auch was unnötig aktiviert oder so, bin hier aber auch nur den gefundenen hilfen im web gefolgt.

Anbei mal die momentanen configs:

Apache2:


```
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>
```
MySQL:


```
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
language = /usr/share/mysql/german
skip-external-locking
key_buffer = 64M
table_cache = 256
max_allowed_packet = 16M
max_connections = 1024
sort_buffer = 8M
thread_stack = 128K
thread_cache_size = 8
query_cache_limit = 1M
query_cache_size = 16M
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
skip-bdb
skip-innodb # InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/. By skipping InnoDB you shrink the mysqld process by circa 100MB.
 
[mysqldump]
quick
quote-names
max_allowed_packet = 16M
[mysql]
no-auto-rehash # faster start of mysql but no tab completition
[isamchk]
key_buffer = 16M
```
PHP:


```
[php]
engine = On
zend.ze1_compatibility_mode = Off
short_open_tag = On
asp_tags = Off
precision = 12
y2k_compliance = On
output_buffering = Off
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func=
serialize_precision = 100
allow_call_time_pass_reference = Off
safe_mode = Off
safe_mode_gid = Off
safe_mode_include_dir = "/usr/share/php"
safe_mode_exec_dir = "/usr/bin"
safe_mode_allowed_env_vars = PHP_
safe_mode_protected_env_vars = LD_LIBRARY_PATH
disable_functions =
disable_classes =
expose_php = On
max_execution_time = 300
max_input_time = 300
memory_limit = 64M
error_reporting = E_ALL & ~E_NOTICE
display_errors = Off
display_startup_errors = Off
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = Off
html_errors = Off
variables_order = "EGPCS"
register_globals = Off
register_long_arrays = On
register_argc_argv = On
auto_globals_jit = Off
post_max_size = 64M
magic_quotes_gpc = On
magic_quotes_runtime = Off
magic_quotes_sybase = Off
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
include_path = ".:/usr/share/php"
doc_root =
user_dir =
enable_dl = On
file_uploads = On
upload_max_filesize = 64M
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
[Date]
[filter]
[iconv]
[sqlite]
[xmlrpc]
[Pcre]
[Syslog]
define_syslog_variables = Off
[mail function]
[SQL]
sql.safe_mode = Off
[ODBC]
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1
[MySQL]
mysql.allow_persistent = On
mysql.max_persistent = -1
mysql.max_links = -1
mysql.default_port =
mysql.default_socket =
mysql.default_host =
mysql.default_user =
mysql.default_password =
mysql.connect_timeout = 60
mysql.trace_mode = Off
[MySQLi]
mysqli.max_links = -1
mysqli.default_port = 3306
mysqli.default_socket =
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off
[mSQL]
msql.allow_persistent = On
msql.max_persistent = -1
msql.max_links = -1
[PostgresSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
[Sybase]
sybase.allow_persistent = On
sybase.max_persistent = -1
sybase.max_links = -1
sybase.min_error_severity = 10
sybase.min_message_severity = 10
sybase.compatability_mode = Off
[Sybase-CT]
sybct.allow_persistent = On
sybct.max_persistent = -1
sybct.max_links = -1
sybct.min_server_severity = 10
sybct.min_client_severity = 10
[bcmath]
bcmath.scale = 0
[browscap]
[Informix]
ifx.default_host =
ifx.default_user =
ifx.default_password =
ifx.allow_persistent = On
ifx.max_persistent = -1
ifx.max_links = -1
ifx.textasvarchar = 0
ifx.byteasvarchar = 0
ifx.charasvarchar = 0
ifx.blobinfile = 0
ifx.nullformat = 0
[Session]
session.save_handler = files
session.use_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 100
session.gc_maxlifetime = 1800
session.bug_compat_42 = 0
session.bug_compat_warn = 0
session.referer_check =
session.entropy_length = 0
session.entropy_file =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 4
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry,fieldset="
[MSSQL]
mssql.allow_persistent = On
mssql.max_persistent = -1
mssql.max_links = -1
mssql.min_error_severity = 10
mssql.min_message_severity = 10
mssql.compatability_mode = Off
mssql.secure_connection = Off
[Assertion]
[Sockets]
; sockets.use_system_read = On
[COM]
[mbstring]
[FrontBase]
[gd]
; gd.jpeg_ignore_warning = 0
[exif]
[Tidy]
tidy.clean_output = Off
[soap]
soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir="/tmp"
soap.wsdl_cache_ttl=86400
[memcache]
memcache.dbpath=/var/lib/memcache
memcache.maxreclevel=0
memcache.maxfiles=0
memcache.archivememlim=0
memcache.maxfilesize=0
memcache.maxratio=0
```
Über die aktivierten Module auf die ich hier nicht näher eingehe (z.B. ImageMagick) mag auch einiges noch gehen, aber im Prinzip geht es mir um die Optimierung eines Servers mit 256MB der alles können soll (hrrhrr) aber wenig genutzt wird (firmen-homepage und passwortgeschütztes kunden-forum und teamspeak für abends) Ich hätte gerne schnellen zugriff, von mir aus zu lasten der gleichzeitigen zugriffe...mehr als 10 gleichzeitige besucher sollten es nie sein, wenn ja, kann der rest abgewiesen werden und warten, hehe.

Ich wäre euch sehr dankbar, wenn ihr da ein paar insider-tipps für mich hättet!


----------



## Till (3. Aug. 2008)

Das Problem ist, dass der Server so wenig RAM hat. Ich befürchte, Du wirst da nicht viel optimieren können, da alle Optimierungen über das RAM laufen.

Du könntest versuchen, die Anzahl der apache Server zu reduzieren, um so mehr ram für die DB frei zu bekommen:

<IfModule mpm_prefork_module>
StartServers 1
MinSpareServers 1
MaxSpareServers 4
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
<IfModule mpm_worker_module>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75 
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>

Dann solltest Du noch einen PHP-Cache wie xcache oder apc installieren.

Nachtrag: Du solltest auch möglichst alle nicht notwendigen Dienste stoppen. Z.B. proftpd, falls Du nicht täglich Änderungen per FTP aufspielst. Wenn Du keine Mailboxen drauf hast, stoppe auch courier.


----------



## schmidtedv (3. Aug. 2008)

Danke, so in etwa hatte ich mit Apache auch schon einmal angefangen...gibt's da irgendwo eine gute Lektüre, die sich speziell mit den verschiedenen Systemoptimierungen befasst? Ich finde zwar gern so persönliche HowTos, die nach Regel XY optimieren oder immer mit nötigen Tests sich herantasten aber keine Systembezogenen Wertetabellen...ist das so schwer zu kalkulieren?

Zudem noch eine Frage...habe gelesen, es liegt am letzten Apache-Update...ich habe Unmengen an


```
::1 - - [03/Aug/2008:10:24:42 +0200] "GET / HTTP/1.0" 302 397 "-" "Apache/2.2.3 (Debian) PHP/5.2.0-8+etch11 mod_ruby/1.2.6 Ruby/1.8.5(2006-08-25) mod_ssl/2.2.3 OpenSSL/0.9.8c (internal dummy connection)"
```
im apache.log (sonst nix...nur immer wieder die dummy connection) wo dann die einen sagen, geht nix ausser mittels extra-Zeile das nicht mitzuloggen (was wäre das für eine in meinem Fall?), die anderen meinen, es müßten mehr Server gestartet sein, die anderen es sollten weniger sein...etc. etc. ...gibt's da schon Erfahrungswerte/Lösungen?


----------

