Apache/MySQL-Optimierung gesucht

Dieses Thema im Forum "Installation und Konfiguration" wurde erstellt von schmidtedv, 3. Aug. 2008.

  1. schmidtedv

    schmidtedv New Member

    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:

    Code:
    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:

    Code:
    [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:

    Code:
    [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!
     
  2. Till

    Till Administrator

    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.
     
  3. schmidtedv

    schmidtedv New Member

    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

    Code:
    ::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?
     

Diese Seite empfehlen