Habe vor einiger Zeit einen Forum-Eintrag gelesen, wie man sein GPS auf seinem Android-System optimieren kann. Diesen Tipp wollte ich hier kurz vorstellen.
Forum: 1.) Erstelle eine Datei mit folgendem Inhalt (gps.conf)
Ggf. kann man auch einige Module (Erweiterungen) von Apache abschaltet, wer z.B. auf seiner Webseite gar keine SSL-Verschlüsselung verwendet, könnte das entsprechende Modul deaktivieren.
a2dismod ssl
/etc/init.d/apache2 restart
Die momentan aktiven Erweiterungen kann man unter “/etc/apache2/mods-enabled/” einsehen, die installierten Erweiterungen sind unter “/etc/apache2/mods-available/” zu finden.
Dynamische Seiten:
– mod_log_config erlaubt die access_log-Dateien in div. Formaten.
– mod_cgi braucht man, wenn man CGI zulassen will.
– mod_suexec erlaubt CGIs als ein bestimmter User zu laufen.
– mod_perl braucht man nicht um Perl als CGI auszuführen!
– mod_php5 ist schneller als suphp (aber nicht so sicher).
– mod_suphp führt php Skript mit den Rechten des entsprechenden webs aus.
– mod_include erlaubt die Verwendung von SSI.
URL-Manipulationen:
– mod_alias braucht man zum Einblenden von virtuellen Verzeichnissen.
– mod_rewrite erlaubt URL-Manipulationen, kostet aber Performance.
– mod_autoindex & mod_dir erlauben eine Navigation ohne index.html
– mod_userdir erlaub User-URLs mit z.B.: www.huschi.net/~huschi/
– mod_negotiation analysiert Accept-Anfragen.
– mod_vhost_alias erlaubt das Anlegen von virtuellen Hosts.
Environment- & Header-Manipulation:
– mod_mime setzt automatisch den richtigen Header anhand der Dateiendung.
– mod_env & mod_setenvif erlauben die modifizierung von ENV-Variablen.
– mod_expires erlaubt die HTTP-Header Manipulation des Expires-Date (Verfall-Zeit).
– mod_ssl erlaubt die Verwendung von SSL (https).
Zudem kann man folgende Option in der Apache-Konfiguration ändern, so dass man DNS-Lookups reduziert.
vim /etc/apache2/apache2.conf
HostNameLookups off
5.2) Reverse Proxy (Nginx)
Wir wollen unsere Webseite mal wieder ein wenig beschleunigen, dies können wir auf verschiedenen Wegen bewerkstelligen, heute beschäftigen wir uns mit dem Reverse-Proxy vor einem Webserver, in diesem Beispiel nutzen wir für diesen Zweck Nginx + apache2. Der große Vorteil von einen Proxy vor dem Webserver ist, dass mehrere Anfragen gleichzeitig gestellt werden könne, um die Performance von statischen Daten zu steigern. Die Anfragen an dynamische Inhalte werden dann noch immer an einen zweiten bzw. an mehrere Webserver, hinter dem Proxy weitergereicht.
Wer sich jetzt fragt, warum man nicht komplett auf Nginx umsteigen sollte, da die Benchmarks zeigen, dass dieser schneller ist als der Apache Webserver, derjenige hat nicht bedacht, dass bei diesen Tests nur die Reaktionen des Webservers auf eine gewisse Anzahl von Anfragen geprüft wird, wenn man jedoch mit “nginx + fcgi” viele php-Dateien verarbeiten möchte, ist ein “apache + mod_php” schneller, zudem kann man diese Daten z.B. mittels eAccelerator zusätzlich cachen, was die Geschwindigkeit von php-Daten noch einmal positiv beeinflusst.
Update: Inzwischen konnte ich die ganzer Sache ausgiebig testen und setzte momentan eine Kombination aus “Varnish” + “Nginx” + “php5-fpm” (+ xcache) ein, so werden die Seiten von Varnish zwischengespeichert alle neue Anfragen von Nginx entgegengenommen, Bilder etc. sofort ausgeliefert und PHP-Anfragen an einen laufendem PHP-Daemon weitergereicht, jedoch erst-einmal zurück zum Beispiel mit Nginx als Reverse-Proxy…
Als Lösung für diese Problem habe ich mir einen Nginx-Proxy gebastelt, der statische Daten (Bilder…) ausliefert und diese zusätzlich für 24 Stunden zwischenspeichert, alle andern dynamischen Inhalte (php,cgi…) werden sofort an apache durch-gereicht. In diesem Beispiel laufen sowohl der Proxy als auch Apache auf einem Server.
5.2.1.) Apache auf einem neuen Port laufen lassen
Folgende Datei öffnen…
vim /etc/apache2/ports.conf
…Port “80” durch z.B. “127.0.0.1:8080” ersetzen.
[stextbox id=”warning”]!!! Wichtig ist hier, darauf zu achten, dass der Apache selber nicht mehr über eine Öffentliche IP-Adresse erreichbar ist. !!![/stextbox]
Ggf. helfen dir die folgenden Zeilen weiter, um alle Einträge in einer Datei zu Ändern (mit vi / vim).
:%s/^80/127.0.0.1:8080/g
:%s/SERVER_IP_ADRESSE:80/127.0.0.1:8080/g
SERVER_IP_ADRESSE muss nun noch mit der IP-Adresse des Servers ersetzte werden und anschließend musst du den Apache Webserver noch neu-starten. Ggf. müssen noch weitere Dateien von Apache angepasst werden.
Mit dem folgendem Befehl kannst du prüfen, ob noch weitere Einträge (Port 80) in der Apache Konfiguration sind.
/bin/grep -wr 80 /etc/apache2/
5.2.2) Ggf. ISPConfig anpassen
Falls du z.B. ISPConfig installiert hat, werden wie Änderungen am Apache Webserver, bei der nächsten Änderung über die Admin-Oberfläche wieder verworfen, daher müssen wir das Template von ISPConfig dementsprechend anpassen.
Nginx läuft nun auf Port 80 und nimmt die Anfragen von Client an und der Apache wartet auf die weitergeleiteten Anfragen von Reverse-Proxy.
[stextbox id=”info”]Bei mir hat der cache (Zwischenspeicherung) jedoch Probleme verursacht, so dass Captcha’s nicht mehr funktioniert haben, daher habe ich diesen im Nachhinein abgeschaltet.[/stextbox]
Nun stehen wir noch vor dem Problem, dass im Logfile von apache die IP-Adresse vom Reverse-Proxy auftauscht und zwar nur noch diese, um dies zu umgehen installieren wir nun noch folgendes…
aptitude install libapache2-mod-rpaf
Nun noch folgendes in den Vhost-Einträgen bzw. in dem ISPConfig Template ergänzen.
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1
/etc/init.d/apache2 reload
…und schon haben wir einen Reverse-Proxy (“Apache” + “Nginx”) installiert. Unter Punkt 5.3 zeige ich wie du ganz auf Nginx setzten kannst und somit nicht zwei Webserver, betreiben & konfigurieren musst.
PHP besitzt selbst keinen Cache, was dazu führt, dass ein Skript bei jedem Aufruf neu übersetzt werden muss. Um dem entgegenzuwirken, gibt es einige Erweiterungen, die diese Funktionalität nachrüsten, wie beispielsweise den eAccelerator den alternativen PHP Cache.
Da PHP selber noch keinen Cache besitzt, was zur Folge hat das die Skript immer und immer wieder neu übersetzt werden müssen, gibt es ein paar Erweiterungen, welche diese Funktion nachrüsten. Und schon sind wir beim Thema.
1.) APC (Alternative PHP Cache)
APC ist ein Open-Source-Zusatzmodul für PHP, das eine beschleunigte Ausführung von PHP-Programmen ermöglicht. Die Beschleunigung wird dadurch erreicht, dass der kompilierte PHP-Quelltext zwischengespeichert wird und bei wiederholter Ausführung das zeitaufwändige Kompilieren nahezu vollständig vermieden werden kann. – Wiki
Als erstes schauen wir uns unsere aktuelle php-Config an…
Die Größe an Dateien welche im Speicher (apc.shm_size) gehalten wird, kann man ganz nach Auslastung des Servers anpassen. Um sich anzeigen zu lassen, wie viel der momentane maximal Wert ist, kannst du folgenden Befehl ausführen. (max seg size (kbytes) = 32768 -> 32MB) Wer einen Root-Server hat kann unter (/etc/sysctl.conf) die folgenden Werte entsprechend anpassen: kernel.shmall, kernel.shmmax
ipcs -lm
/etc/init.d/apache2 restart
[stextbox id=”info”]Die komplette Dokumentation kann im PHP Manual gefunden werden: http://de2.php.net/manual/de/ref.apc.php[/stextbox]
2.) eAccelerator
eAccelerator ist eine Open Source Software zum Einsatz auf Webservern, die als Beschleuniger, Optimierer und Cache für PHP-Seiten dient. – Wiki
Wir schauen uns wieder unsere aktuelle php-Config an…
aptitude install build-essential php5-dev git
cd /usr/src/
git clone https://github.com/eaccelerator/eaccelerator
cd eaccelerator/
phpize
./configure
make
make install
vim /etc/php5/conf.d/eaccelerator.ini
eaccelerator.shm_size Die Menge an Arbeitsspeicher (in Megabytes) welche eAccelerator verwenden darf. Der Standard Wert ist “0”.
eaccelerator.cache_dir Gibt das Verzeichnis an, wo eAccelerator die vorkompilierten Daten auf der Festplatte speichern darf. Die gleichen Daten können auch im Speicher oder auch nur im Speicher untergebracht werden, was einen schnelleren Zugriff zu folge hätte. Der Standard Wert ist “/tmp/eaccelerator”.
eaccelerator.enable Ein- / Ausschalten von eAccelerator. Wobei “1” gleich “an” bedeutet. Der Standard Wert ist “1”.
eaccelerator.optimizer Hier kannst du Ein- / Ausschalten ob der PHP-Code noch optimiert werden soll. Wobei “1” gleich “an” bedeutet. Der Standard Wert ist “1”.
eaccelerator.debug Hier kannst du das Debug-Logging Ein- / Ausschalten. Der Standard Wert ist “0”.
eaccelerator.check_mtime Ein- / Ausschalten für die Prüfung, ob der PHP-Code geändert wurde und somit doch noch mal neu übersetzt werden sollte. Wobei “1” gleich “an” bedeutet. Der Standard Wert ist “1”.
eaccelerator.filter Hier kannst du angeben welche Daten gecacht werden sollen. (z.B. “*.php *.phtml”) Wenn der Eintrag mit einem “!” beginnt, bedeutet dies, das diese Daten nicht gecacht werden. Der Standard Wert ist “”. -> was bedeutet, dass alles gecacht wird.
eaccelerator.shm_max Wenn sehr große Daten nicht in den Arbeitsspeicher wandern sollen, dann mann man diesen Wert setzten. (z.B. 10240, 10K, 1M). Der Standard Wert ist “0”.
eaccelerator.shm_ttl Wenn eaccelerator keinen Arbeitsspeicher mehr zur Verfügung hat, werden alle Daten gelöscht, welche älter sind als z.B. “9000” Sekunden (Webseiten welche die letzten 2 1/2 Stunden nicht besucht wurden) Der Standard Wert ist “0”.
eaccelerator.shm_prune_period Wenn eaccelerator keinen Arbeitsspeicher mehr zur Verfügung hat, werden die Daten welche vor z.B. 9000 Sekunden gecacht wurden gelöscht. Der Standard Wert ist “0”.
eaccelerator.shm_only Ein- / Ausschalten vom Cache auf der Festplatte. Der Standard Wert ist “0”. -> Was bedeutet das sowohl im Arbeitsspeicher als auch auf der Festplatte gecacht wird.
eaccelerator.compress Ein- / Ausschalten der Komprimierung der Daten. Der Standard Wert ist “1”.
eaccelerator.compress_level Stellt den Grad der Komprimierung ein. Der Standard Wert ist “9”. -> Max. Komprimierung
3.) XCache
Opcode-Cacher zum PHP-Beschleunigen auf Servern, beschleunigt den Prozess des Kompilierens von PHP-Skripten, indem er den kompilierten Zustand von PHP-Skripten im RAM zwischenspeichert und die kompilierte Version direkt aus dem Hauptspeicher nutzt.
aptitude install php5-xcache
Hier noch meine Konfiguration für das WordPress Plugin “W3 Total Cache” …
vim /etc/php5/conf.d/xcache.ini
; configuration for php xcache module
[xcache-common]
extension=xcache.so
[xcache.admin]
xcache.admin.enable_auth = Off
;xcache.admin.user = "admin"
;xcache.admin.pass = ""
[xcache]
; select low level shm/allocator scheme implemenation
xcache.shm_scheme = "mmap"
; to disable: xcache.size=0 (Standard)
; to enable : xcache.size=64M etc (any size > 0) and your system mmap allows
xcache.size = 64M
; set to cpu count (cat /proc/cpuinfo |grep -c processor)
xcache.count = 1
; just a hash hints, you can always store count(items) > slots
xcache.slots = 8K
; ttl of the cache item, 0=forever
xcache.ttl = 0
; interval of gc scanning expired items, 0=no scan, other values is in seconds
xcache.gc_interval = 0
; same as aboves but for variable cache
xcache.var_size = 64M
xcache.var_count = 1
xcache.var_slots = 8K
; default ttl
xcache.var_ttl = 0
xcache.var_maxttl = 0
xcache.var_gc_interval = 900
xcache.test = Off
; N/A for /dev/zero
xcache.readonly_protection = Off
; for *nix, xcache.mmap_path is a file path, not directory.
; Use something like "/tmp/xcache" if you want to turn on ReadonlyProtection
; 2 group of php won't share the same /tmp/xcache
; for win32, xcache.mmap_path=anonymous map name, not file path
;
; xcache.mmap_path = "/dev/zero"
; leave it blank(disabled) or "/tmp/phpcore/"
; make sure it's writable by php (without checking open_basedir)
;
; xcache.coredump_directory = ""
; per request settings
xcache.cacher = On
xcache.stat = Off
xcache.optimizer = On
[xcache.coverager]
; per request settings
; enable coverage data collecting for xcache.coveragedump_directory and xcache_coverager_start/stop/get/clean() functions (will hurt executing performance)
;
;xcache.coverager = Off
; ini only settings
; make sure it's readable (care open_basedir) by coverage viewer script
; requires xcache.coverager=On
;
;xcache.coveragedump_directory = ""
Mit folgendem Befehl habe ich die Geschwindigkeit meiner Webseite getestet, wobei ich in der Zwischenzeit, vom apache2 als Webserver Abstand genommen habe und voll auf “nginx” setzte. :-)
ab -n500 -c20 -dS "http://suckup.de/"
Somit wurden 500 Seitenaufrufe, davon 20 parallel ausgeführt, um einen Durchschnittswert zu erhalten habe ich den Befehl 3x ausgeführt und xCache war ein wenig schneller!!! :-)
Man kann auch verschiedene Caching-Methoden miteinander kombinieren, so habe ich z.B. Zeitweise auf dieser Webseite sowohl eAccelerator als auch “memcached + php5-memcache” eingesetzt, jedoch war der Speicherverbrauch nicht für einen kleinen V-Server ausgelegt.
Distributed memory caching system, was bedeutet, dass als Speichersystem auch mehrere Rechner verwendet werden können, ursprünglich wurde memcache für Livejournal entwickelt.
Um mittels memcachd Daten direkt in den Arbeitsspeicher auszulagern, muss man als ersteres folgende Pakete installieren. – Debian/Ubuntu HowTo
Ggf. kann man auch noch einige PHP-Erweiterungen abschalten, um den Speicherverbrauch von PHP zu verringern und dies somit zu beschleunigen.
ls /etc/php5/conf.d/
meine aktuell aktivierten Erweiterungen:
curl.ini
gd.ini
mcrypt.ini
mysql.ini
mysqli.ini
suhosin.ini
xcache.ini
[stextbox id=”info”]Man sollte natürlich beachten, welche PHP-Anwendungen man auf seiner Webseite installiert hat bzw. möchte und dessen Abhängigkeiten.[/stextbox]
6.4) php.ini (Konfiguration) optimieren
Als erstes müssen wir klären, welche Datei geändert werden muss, um die Konfiguration von PHP wirklich zu ändern, dafür nutzen wir am einfachsten eine php_info.php – Datei, welche im Webverzeichnis abgelegt wird und direkt über den Browser aufgerufen wird.
vim php_info.php
<?php
phpinfo();
?>
Bei mir wird angezeigt, dass die Konfigurationsdatei an folgender Stelle editiert werden muss.
vim /etc/php5/apache2/php.ini
register_argc_argv = Off
Diese Einstellung ist nur nützlich, wenn man PHP über die Kommandozeile aufruft und dort Parameter mitgeben möchte, ansonsten aus.
always_populate_raw_post_data = Off
Da ich diese Funktion nicht nutze hab ich diese deaktiviert, sollte man einfach mal ausprobieren…
… die meisten Einstellung an PHP muss man jedoch, genauso wie die meisten Einstellungen an eine bestimmte Situation anpassen!
Falls du keinen Zugriff auf die Konfiguration von Apache hast, kannst du den Browser-Cache folgendermaßen beeinflussen. Nun wollen wir unseren JS/CSS Dateien noch einen Header mitgeben, welcher wiederum bewirkt, dass der entsprechende Browser (Client) die Datei für eine gewisse Zeit speichert und für „neu“ hält, dies spart wieder Traffic, welchen wir nicht bezahlen müssen und außerdem beschleunigt es den Seitenaufruf.
CSS in PHP umbenennen, um den php-Code in der Datei ausführen zu können.
mv test.css test.css.php
Anschließend werden wir am Anfang der Datei folgendes mit einfügen.
<?php
require_once("gzipCSS.php");
?>
Im folgenden Beispiel wird die Datei für 3 Tage (60 * 60 * 24 * 3) gespeichert.
[stextbox id=”info”]Falls man die Komprimierung jedoch bereits serverseitig aktiviert hat, hatte ich das Problem, dass die Webseite nicht zu-ende geladen werden konnte, daher würde ich empfehlen auf diese Methode zu verzichten, sofern man Zugriff auf das System hat und die Einstellungen am Webserver selber einstellen kann, zumal es relativ lange dauern dürfte, bis man alle Dateien auf diese weiße optimiert hat![/stextbox]
Expires – in diesen Header-Eintrag wird, für jede Server-Antwort festgelegt, wie lange diese gültig ist. Um jedoch erst-einmal zu verstehen, was in diesem Header steht folgt ein kleines Beispiel in
PHP:
function setExpires($expires) {
header(
'Expires: '.gmdate('D, d M Y H:i:s', time()+$expires).'GMT');
}
setExpires(10);
echo ( 'This page will self destruct in 10 seconds<br />' );
echo ( 'The GMT is now '.gmdate('H:i:s').'<br />' );
echo ( '<a href="'.$_SERVER['PHP_SELF'].'">View Again</a><br />' );
nach 10 Sekunden ist diese Webseite alt und muss vom Browser erneut geladen werden.
Kommen wir nun zurück zur Konfiguration von Apache, um „expires“ zu aktivieren führen wir unter Linux Debian/Ubuntu folgendes Kommando aus.
a2enmod expires
a2enmod headers
Nun passen wir die entsprechende Konfiguration an, um bestimmte Dateien für eine gewisse Zeit clientseitig zu speichern.
vim /etc/apache2/mods-available/expires.conf
<IfModule mod_expires.c>
AddType image/vnd.microsoft.icon .ico
AddType application/javascript .js
AddType application/x-tar .tgz
AddType text/plain .c
AddType text/plain .h
ExpiresActive On
ExpiresDefault "access plus 4 houres"
ExpiresByType image/vnd.microsoft.icon "access plus 3 months"
ExpiresByType image/ico "access plus 3 month"
ExpiresByType image/x-icon "access plus 3 month"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType text/js "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType application/x-javascript "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresByType video/x-flv "access plus 1 month"
ExpiresByType video/quicktime "access plus 1 months"
ExpiresByType video/mp4 "access plus 1 months"
ExpiresByType video/mpeg "access plus 1 months"
ExpiresByType video/x-ms-wmv "access plus 1 months"
ExpiresByType audio/mpeg "access plus 1 months"
ExpiresByType audio/y-wav "access plus 1 months"
ExpiresByType application/pdf "access plus 2 weeks"
ExpiresByType application/zip "access plus 2 weeks"
ExpiresByType application/x-tar "access plus 2 weeks"
ExpiresByType application/x-download "access plus 2 weeks"
ExpiresByType application/ps "access plus 2 weeks"
ExpiresByType application/msword "access plus 2 weeks"
ExpiresByType text/css "access plus 2 weeks"
ExpiresByType application/xml "access plus 24 houres"
ExpiresByType application/xhtml+xml "access plus 24 houres"
ExpiresByType text/html "access plus 12 houres"
ExpiresByType text/htm "access plus 12 houres"
ExpiresByType text/plain "access plus 12 hours"
ExpiresByType text/xml "access plus 12 hours"
<IfModule mod_headers.c>
<FilesMatch "\\.(ico)$">
Header set Cache-Control "max-age=29030400, public"
</FilesMatch>
<FilesMatch "\\.(css|pdf|flv|jpg|jpeg|png|gif|swf)$">
Header set Cache-Control "max-age=2419200, public"
</FilesMatch>
<FilesMatch "\\.(js)$">
Header set Cache-Control "max-age=216000, private"
</FilesMatch>
<FilesMatch "\\.(xml|txt)$">
Header set Cache-Control "max-age=216000, public, must-revalidate"
</FilesMatch>
<FilesMatch "\\.(html|htm)$">
Header set Cache-Control "max-age=300, private, must-revalidate"
</FilesMatch>
<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
ExpiresActive Off
Header unset Expires
Header unset Last-Modified
Header set Pragma "no-cache"
Header set Cache-Control "private, no-cache, no-store, proxy-revalidate, no-transform"
</FilesMatch>
</IfModule>
FileETag none
</IfModule>
… und den Apache-Webserver neu-starten, um die neue Konfiguration zu übernehmen.
/etc/init.d/apache2 restart
Nun werden bestimmte Daten z.B. Bilder erst nach einem Monat wieder von der Webseite geholt, solange diese noch im Cache des Browsers sind und nicht manuell neu angefragt werden (F5).
ohne Expires:
mit Expires:
Die Grafik sind ebenfalls von YSlow, die Erweiterung, welche ich am Anfang des Artikels bereits beschrieben habe. Im ersten Bild siehst du die Ausgabe, wenn ein neuer Besucher (leerer Browsercache) meine Seite besucht und im zweiten, wenn z. B. ein Stammbesucher die Website aufruft, somit lässt sich gut erkennen wie viel Traffic it dieser Methode bereits bei einem Seitenaufruf eingespart werden kann, rechnet das mal für einen Monat hoch. ^^
Syntax:
ExpiresByType <TYPE> “<BASIS> [ plus ] <ANZAHL> <TYP>”
<TYPE> hier wird der Datei-Type definiert
<BASIS>
– modification ist das Änderungsdatum
– access oder now stehen für den Zugriffszeitpunkt
Das Schlüsselwort „plus“ ist optional. Es verdeutlicht die Tatsache, dass die nachfolgende Zeitangabe zum Basiszeitpunkt addiert wird
benötigen wir mehr als 6,5 max_connections, müssen wir mehr RAM zur Verfügung stellen oder read_buffer und sort_buffer kleiner einstellen…
[stextbox id=”info” caption=”Regel”]
Je weniger RAM zur Verfügung steht und je mehr max_connections benötigt werden, desto kleiner müssen read_buffer, sort_buffer u. key_buffer sein.
[/stextbox]
my.cnf – Konfigurationsdatei überprüfen ob der key_buffer so groß ist, dass alle Indizies in den Buffer passen und table_cache in etwa der Anzahl der Tabellen entspricht.
Zudem sollte man darauf achten, dass MySQL-Cache eingeschaltet ist.
-> query_cache_type=1
Als Anwendungsbeispiel werde ich an dieser Stelle die MySQL-Konfiguration meines Servers überprüfen ->
/root/mysqltuner.pl
Ich werde hier jedoch nur die Fehler, welches das Skript in meiner Konfig gefunden hat auflisten…
[!!] Total fragmented tables: 2
-> das nachfolgende Kommando schafft hier Abhilfe (könnte man so, oder so ähnlich auch als cronjob (crontab) laufen lassen
In diesem Beispiel werden alle Datenbanken, jede 30 Minuten defragmentiert bzw. optimiert.
[!!] Key buffer size / total MyISAM indexes: 10.0M/13.7M
-> key_buffer = 15M erhöhen
7.1) MariaDB (MySQL-Fork)
In den letzen Wochen habe ich auch mit einem Mysql-Fork herumgespielt (MariaDB), dieser soll einige Vorteile in der Geschwindigkeit bringen. Man kann die Software über die Debian Pakete installieren nachdem man folgendes in seine “sources.list” aufgenommen hat.
deb http://mirror.ourdelta.org/deb lenny mariadb-ourdelta
deb-src http://mirror.ourdelta.org/deb lenny mariadb-ourdelt
… danach noch ein …
apt-get update
… und schon kannst du die Software gegen MySQL austauchen, dies funktioniert z.B. mit “aptitude” (mariadb-server) auch sehr gut, jedoch hatte ich das Problem, dass mein ISPConfig (eine Server Verwaltungsoberfläche) keine neuen Benutzer anlegen konnte, da sich die Syntax des Befehls ein wenig unterscheidet.
So langsam möchte ich auf die Fragen, welche bisher aufgetaucht sein könnten eingehen und mit der Beschleunigung der Webseite anfangen, daher starten wir mit der Komprimierung.
Alle neuen Browser (ab IE6) unterstützen komprimierte Dateien, man kann sich dies so ähnlich vorstellen, wie in dem diesem Proxy-Beispiel, wo die Dateien serverseitig komprimiert werden und vom Client, in unserm Fall nun der Browser wieder dekomprimiert werden. Aber dazu kommen wir gleich. Das Problem ist, dass Bilder bereits komprimiert sind und falls diese im Nachhinein noch einmal passiert, diese sogar größer werden können als zuvor, daher versucht man diese bereits bei der Bereitstellung in der optimalen Dateigröße anzubieten, zudem sollte man vermeiden, dass zu viele kleine Dateien vom Server geladen werden müssen, da zu viele Verbindungen bzw. Anfragen sich auch seht negativ auf die Performance einer Webseite auswirken.
2.1) Bilder komprimieren
2.1.1) Bilder Sprites
spritemap
Durch viele kleine Icons / Menü-Bildern kommen viele Serveranfragen zustande, welche man durch ein größeres Bild, welches dann wiederum mit css so bearbeitet werden kann, dass man bestimmte Bildabschnitte ansprechen kann, ersetzten könnte.
Es folgt noch ein Beispiel, um das Prinzip zu verstehen…
alte CSS-Regeln:
#header {background: url(bild1.jpg) top left repeat-x; height:80px;}
ul.menu li {background: url(bild2.jpg) top left repeat-x; height:15px;}
bild1.jpg und bild2.jpg sind jeweils 1px breit. Waf der folgenden Webseite → Sprite-Generator ← kann man diese beiden Dateien nun zu einer Sprite-Datei zusammenfassen und herunterladen bzw. auf Webserver hochladen.
Dieses Sprite-Bild wird nun für alle Elemente, die einen im Sprite enthaltenen Hintergrund haben eingefügt:
#header, ul.menu li {background-image:url(bg_sprite.png);}
Mithilfe der im Generator angegebenen Regeln, werden die alten CSS-Regeln ersetzen:
Dies fällt bei größeren Bildern mehr ins Gewicht, jedoch kann auch die Komprimierung von solchen Logos etc. schon einige hundert MB im Monat einsparen, zumal PNG in Gegensatz zu JPEG eine verlustfreie Neukomprimierung unterstützt.
Als alternative zu all dieses serverseitigen Möglichkeiten kannst du deiner Bilder natürlich auch mit einem Bildbearbeitungsprogramm (z.B. Paint.NET) öffnen und z.B. optimiert für Webseiten abspeichern.
2.2) JavaScript/CSS komprimieren
2.2.1) JavaScript/CSS komprimieren – serverseitig
Hier werde ich kurz zeigen wir du deine JS- und CSS-Dateien nicht nur komprimieren kannst, um die Ladegeschwindigkeit deiner Webseite zu verbessern, sondern auch noch optimierst, so dass diese schneller ausgeführt werden. Der CSS-Kompressions-Algorithmus verwendet zudem einen Satz von fein aufeinander abgestimmten reguläre Ausdrücke, um die CSS-Datei zu komprimieren.
[stextbox id=”info”]Bei mir hat das kombinieren von einigen JS- und CSS-Dateien negative Auswirkungen gehabt, so haben einige JS nicht mehr funktioniert, zudem sollte man bedenken, dass einige Dateien nicht auf jeder Webseite benötigt werden und daher auch ruhig später geladen werden können, sobald ein Besucher z.B. auf Kommentare klickt.[/stextbox]
Eine weitere Methode besteht darin, die Daten selber gar nicht zu verändern, sondern diese direkt und nach einer bestimmten Zeit neu von einem Server komprimieren zu lassen, diese Methode hat daher auch wieder nachteiligen Einfluss auf die Ladegeschwindigkeit, da ein weitere Request, DNS-Lookup usw. hinzukommt. Jedoch kann man an diesen Online-Dienst auch mehrere CSS- bzw. JS-Dateien gleichzeitig übergeben. Ob dies wirklich die Performance steigern kann müsste man im Einzellfall ausprobieren.
Serverseitige Komprimierung und somit eine Reduzierung der zu Übertragungen Datenmengen von 40 – 70 % sind hier zu erreichen, zudem kannst du mithilfe der folgenden Konfigurationen gleich mehrere Webseiten, welche auf dem selben Server laufen optimieren.
ohne gzip-Kompression:
http_request
mit gzip-Kompression:
http_request_compressed
Aktiviere mod_deflate (gzip) – serverseitig
Diese Art der Komprimierung macht natürlich nur bei Dateien Sinn, welche auch komprimiert werden können z.B. HTML, CSS oder Javascript …
a2enmod deflate
… dieser Befehl kann unter anderen Distributionen anders aussehen z.B.: BSD
Mithilfe von gzip (DeflateCompressionLevel) kann man verschneide Kompressions-Level einstellen, wobei 1 die schnellsten Komprimierung (weniger Kompression) und 9 die langsamste Komprimierung (beste Kompression) ist. Die Standard-Kompressions-Level ist 6. da eine zu hohe Kompression auf Kosten der der Systemleistung geht, ggf. kann man diesen Wert anpassen, wenn man noch genügend Ressourcen frei hat.
Nun müssen wir unsern Webserver neu-starten, um die Konfiguration zu übernehmen.
Wer noch apache und nicht apache2 verwendet sollte “mod_gzip” anstelle von “deflate” ansehen, jedoch werde ich nicht weiter auf die veraltete Apache-Version eingehen, wenn noch jemand den alten “Apache Web-Server” einsetzt, soll man ggf. ein Update auf apache2 durchführen…
“Nur unter Apache 1.3 ist “mod_gzip” effektiver ab “Apache 2.x” sollte man “mod_deflate” verwenden.”
Es gibt auch noch die Möglichkeit Dateien serverseitig im Vorhinein zu komprimieren und in einer .htaccess anzugeben, welche Dateien bzw. Dateiendungen vom Browser wieder dekomprimiert werden müssen. Ich selber habe auch eine Mischung aus den verschienden Komprimierungsverfahren gewählt, so habe ich sehr große JS-Dateien im Vorhinein folgendermaßen komprimiert, so dass der Server dies nicht jedes mal machen muss, zudem hat dieses Verfahren den großen Vorteil, dass man die negative Auswirkung des hohen Komprimierungslevel, auf die Systemauslastung umgeht.
Der Artikel beschreibt, wie man seine Webseite bzw. seinen Server analysiert und optimiert um Performance zu gewinnen, Ladezeit zu reduzierten bzw. Traffic einzusparen. Man kann einiges an Performance gewinnen, indem man z.B. Bilder im richtigen Format abspeichert bzw. komprimiert, CSS- / JS-Dateien kombiniert und ebenfalls komprimiert oder auch bestimmt Daten vorkomprimiert zur Verfügung stellt.
Abschließend möchte ich diesen Thema noch einmal kurz zusammenfassen, so dass man ggf. selber weitere Möglichkeiten erkennt, die Ladegeschwindigkeit seiner Webseite zu verbessern, jedoch nicht auf die Technische Umsetzung eingehen.
Kenne deinen Feind !!!
80 bis 90% der schlechten Performance liegt an der Webseite selber und nicht auf der Serverseite, solange nur wenig Besucher auf deiner Webseite sind, braucht man sich eigentlich um einen Revere-Proxy oder eine alternative zu Apache keine oder zumindest nur wenig Gedanken machen, da die Performance erst mit steigender Besucherzahl einbricht. Jedoch sollte man in jedem Fall die gzip-Komprimierung und den Browser-Cache nutzen.
Externe Dateien (Bilder, JS, CSS, Videos…)
Jeder Aufruf einer Datei kostet Performance und Bandbreite, daher sollte man im allgemeinen weniger Requests produzieren, indem man z.B. JS- bzw. CSS-Dateien kombiniert. Dieser negative Einwirkung steigt dramatisch bei externen Dateien von andern Servern und besonders dann, wenn dieser gerade mal nicht erreichbar ist.
Scripte
Immer wenn eine Browser eine Webseite abruft und im HTML-Code ein Script finde, wird das weitere laden der Webseite eingestellt und erst-einmal die JavaScript Engine damit beansprucht, diesen zu interpretieren. Daher sollte man diese Dateien erst am Ende der Webseite laden lassen, so dass der User die Webseite früher sehen kann, auch wenn z.B. die Animation des Menüs erst nach nachgeladen werden muss. Mit diesem Ansatz, erscheint es nur Sinnvoll CSS-Daten am Anfang laden zu lassen, so dass sich die Webseite dem User direkt im korrektem Layout präsentiert.
Bilder
Ein weites großer Bereich sind Bilder, dabei muss man jedoch ein gutes Mittelmaß an Text und Bildern finden, da die User zwar Bilder immer schön finden.. Logo, Hintergrundbild u.s.w. jedoch macht es nur wenig Sinn seine selbst jeder kleine Datei zu optimieren, wenn man oben über der Webseite ein 300 KB großes Bild eingefügt hat. Wie bereit im Artikel beschrieben gibt es jedoch zahlreiche Methoden (PNG- und JPEG-Dateien) diese zu optimieren.
Yahoo hat zudem eine sehr umfassende Liste von weiteren Regeln zusammengestellt, welche man beachten sollte.
In diesem HowTo werde ich zeigen, wie du dein Android (GALAXY SPICA I5700) Handy optimieren kannst. Nach dieser Optimierung hat dein Handy einige neue Funktion läuft mit Android 2.1 und ist um einiges schneller.
[stextbox id=”warning”]Warnung: Indem du diese Updates einspielst, gehen die Einstellungen auf dem Handy verloren und du musst deine Einstellungen wieder neu vornehmen z.B. APN (BASE = E-Plus), außerdem funktionieren einige Applikationen nicht im apps2sd-Modus, aber dazu gleich mehr. Die Kontakte bleiben jedoch erhalten.[/stextbox]
Mein Spica hat nun folge Werte: Linpack for Android
– neu-partitionieren deiner SD-Karte->eine zweite Partition (FAT32 + ext2/3/4) um dort Applikationen zu installieren (apps2sd)
Apps2sd: basierend auf CyanogenMod (apps2sd)
– du kannst deine Apps vom internen Speicher auf die SD-Karte speichern, wenn du willst, indem du wie in diesem Blog-Artikel beschrieben eine zweite Partition auf deiner SD-Karte zu erstellen. (FAT32 + ext2/3/4)
1.) Treiber herunterladen/installieren
“Windows XP” -> “SAMSUNG New PC Studio” -> Download-Link
Als erstes benötigen wir unter Windows folgendes Programm “SAMSUNG New PC Studio” bzw. “SAMSUNG Kies“, eigentlich benötigen wir nur die Treiber, diese sind jedoch mit in der Software integriert, daher einfach installieren und nach der Installation das Programm wieder schließen und nicht mehr beachten… ;-)
Da bei den meisten Geräten nicht die neuste Firmware drauf sein dürfte, laden wir uns die folgende Datei herunter. Um diese Datei “I570EUXJG1.rar” jedoch zu öffnen benötigst du z.B. 7-Zip. (hat bei mir schon lange WinZip… WinRAR und so weiter verdrängt ^^)
Die neusten Firmwares für Samsung I5700 Spica findest du unter folgendem Link, die zuvor erwähnten Firmware war ist bisher (26.08.2010) die aktuellste Version und ich hatte mit dieser keinerlei Probleme.:
Um “USB debugging” auf deinem Handy zu aktivieren, gehst du wie folgt vor |
Settings->Applications->Development->Enable USB debugging
5.) Software starten
Bevor wir unser Handy am PC anschließen, staten wir die Odin-Software und geben den Pfad zu den zuvor heruntergeladenen Dateien an.
6.) Handy vorbereiten & Firmware installieren
Du musst dein Handy nun ausschalten und es darf nicht per USB am PC angeschlossen sein, ansonsten kann es nicht im neuen Modus hochfahren, dies geschieht, indem wie im folgendem Bild beschrieben die leiser-, Kamera- und die ein/aus-Taste gedrückt hältst…
leiser + Kamera + aus/ein
…nun sollte folgender Bildschirm erscheinen, …
Download-Modus
…wenn dies geschehen ist, kannst du dein Handy mit dem USB-Kabel am PC anschließen. Du wirst sehen, dass die Odin-Software feststellt, dass du dein Handy angeschlossen hast, nun kannst du in der Software auf “Start” klicken und abwarten, falls dein Handy nicht nach dem automatischen Reboot nicht mehr hochfahren sollte, keine Panik.
Sobald du einige Minuten abgewartet hast und die Odin-Software anzeigt, dass alles abgeschlossen ist, dein Handy jedoch nicht mehr hochfährt, nimm einmal den Akku heraus und setzte ihn wieder ein, dann starte dein Handy erneut.
Um die am Anfang genannten Funktionen nutzen zu können brauchen wir noch weiter Updates. Als erstes benötigen wir den “Recovery-Modus”, diesen rüsten wir viel folgt nach.
7.2.) nun musst du dein Handy wieder ausschalten und vom PC entfernen
7.3.) dann wieder die Odin-Software starten und dieses man nur die PDA-Datei auswählen
7.4.) nun musst du dein Handy wieder im Download-Modus starten (leiser+Kamera+an/aus) und danach am PC anschließen und sobald die Software dies mitbekommen hat, kannst du wieder auf “Start” klicken. Danach sollte dein Handy direkt im Recovery-Menü landen (beim ersten Reboot). Um später noch einmal zu diesem Menü zu gelangen, musst du folgende Tasten drücken -> (leiser+anrufen+auflegen)
(leiser+anrufen+auflegen)
7.5.) Da wir Applikationen auf deiner SD-Karte installieren wollen und als nächstes den SamdroidMod installieren möchten, musst du auch noch mit dem Recovery-Modus die SD-Karte formatieren, dabei gehen jedoch alle Daten, auf der SD-Karte verloren, also vorher auf dem PC sichern!!!!!, indem du in dem Recovery-Menü, “Partition sdcard” auswählst und ganz nach der Größe deiner SD-Karte “256МB”, “384МB”, “512MB” auswählst. Der Rest der SD-Karte bleibt im FAT32-Format, so dass du auch von Windows auf dein Handy zugreifen kannst (Bilder, Videos…)
8.1.) Als erstes musst du dich in dem hier schon öfter erwähnten Forum anmelden -> samdroid.net <- dann kannst du unter der zuvor Verlinkten Forum-Seite dein eigenes System zusammenklicken.
Hinweise:
– Base packages -> SamdroidMod Version 1.3.1.deodexed [XXJH1] (Android 2.1)
– Kernel -> Kernel [LK2.09.4 (Multitouch from Gabriel-LG v2b + antibyte camera bugfix2 + Superuser 2.3.5)]
– Extended SamdroidMod Components -> ganz nach belieben
– Boot animations -> ganz nach belieben (ich nutze “Green Eye Boot Animation”)
– Experimental components -> habe ich nicht ausgewählt
8.2.) die neu erstellte Datei (SamdroidMod-update.zip) musst du im oberen Verzeichnis deiner SD-Karte speichern
8.3.) Reboot zu Recovery (leiser+anrufen+auflegen) und wähle wieder “Apply any zip” -> SamdroidMod-update.zip
[stextbox id=”info”]Info: Der erste Boot-Vorgang kann sehr lange dauern (zwischen dem Logo und der Boot-Animation) wieder mal keine Sorgen machen und abwarten. Wenn jedoch zirka 5 Minuten nichts passiert, dann noch einmal den Recovery-Modus staten und im Menüpunkt “Wipe” -> “Wipe data/cache” auswählen und noch einmal neu-starten.[/stextbox]
8.4.) Nun aktivieren wir “apps2sd”, dafür müssen wir folgendes machen: “Samdroid Tools” -> “Apps2sd settings” -> “Enable Apps2sd” + “Move dalvik-cache to SD”
[stextbox id=”warning”]”Frozen Eclair” (FE) sind von Android 2.2 zurück portierte Dateien für 2.1, diese können zu Instabilität deines Handys führen, besonders wenn du die PreBeta bzw. Beta FE verwendest.[/stextbox]
9.1.) Die folgende Dateie musst du nun herunterladen und im Recovery-Modus (“Apply any zip”) auswählen und somit installieren. Nachdem ich nun alle Versionen ausprobiert habe, empfehle ich die neuste “FE 8 Beta4” und keine PreBeta Versionen zu verwenden.
9.2.) Turbo Kernel + Multi Touch: Die folgende Datei herunterladen Samdroid Turbo Kernel (V10) und mit Odin folgende Datei auswählen “SamTurbo_V9_PDA.tar” -> “PDA”. (>9 MFLOPS). Da ich eine stabile Version momentan bevorzuge, habe ich diesen Kernel momentan nicht installiert, zudem ist die “Multi Touch”-Funktionalität nun bereits im SamdroidMod (>= LK2.09.1 -Multitouch) integriert. :-)
[stextbox id=”info”]Info: Der erste Boot-Vorgang kann sehr lange dauern, wenn dies nicht funktioniert, solltest du noch einmal im Recovery-Modus staten und im Menüpunkt “Wipe” -> “Wipe data/cache” auswählen und noch einmal neu-starten.[/stextbox]
10.) Tuning-Apps nachinstallieren
Es gibt einige Apps welche dein Android-Handy verbessern können, ich zeige hier kurz welche ich momentan verwende.
Nachdem du das App installiert und zum ersten mal gestartet hast, wirst du gefragt, um welches Handy es sich handelt, hier wählst du “Samsung Moment (ARM)” aus. Als nächstes wählst im Reiter “Main” -> “Set on Boot” aus. Fertig.
10.2.) Advanced Task Killer (Free)
Lässt sich direkt über den “Market” installieren. Nachdem du es installiert und zum ersten mal gestartet hast, musst du eine Ausnahmeliste erstellen, indem du die ein App im “Advanced Task Killer” länge gedrückt hältst und dann auf “Ignore” tippst. Fertig.
10.3.) Autorun Killer
Lässt sich ebenfalls direkt über den “Market” installieren. Indem du ein App länger gedrückt hältst, kannst du auf “Enable/Disable” tippen, so dass dieses nicht mehr am Anfang gestartet wird und somit keine Ressourcen mehr verbraucht.
10.4.) AddFree
Lässt sich ebenfalls direkt über den “Market” installieren. “Adblocker” mittels Modifizierung der hosts-Datei, somit wird die Werbung erst gar nicht heruntergeladen und funktioniert in anderen Apps, Browser u.s.w.!
Wer will kann nun noch einige Kleinigkeiten Verbessern, dazu hier noch ein paar von meinen Blog-Einträgen :-)
In diesen Artikel beschreibe ich kurz wie man die Bash-History nutzt, dafür stellen wir als erstes einige Dinge in der “.bashrc“-Datei in unserm Home-Verzeichnis ein.
vim ~/.bashrc
#keine doppelten Eintraege hintereinander in die History schreiben
export HISTCONTROL=ignoreboth
#History Datei niemals ueberschreiben, sondern neue Eintraege unten anfuegen
shopt -s histappend
#Datum zum Historylog hinzufuegen
export HISTTIMEFORMAT="%F %T"
# History auf 3000 Eintraege erweitern export
HISTSIZE=3000
Befehl
Beschreibung
fc -l
zeigt die letzten Befehle in einer Liste an
Strg + L
führt den clear-Befehl aus und säubert sozusagen die Konsole ;-) Die Befehle “reset”, “TERM=linux” und “loadkeys de” (amerikanischen Tastaturlayout – Bild) können einem auch weiterhelfen…
Strg + r
sucht einen Befehl in der Bash-History (mehrmaliges drücken von Strg+r geht weiter in der History zurück)
Alt + .
schreibt den letzten Parameter des letzen Befehls auf die Konsole
!$
schreibt den letzten Parameter des letzen Befehls auf die Konsole (Alt + .)
!!
führt den letzten Befehl noch einmal aus
!string
startet den letzten Befehl, der mit sting anfängt
!?string
startet den letzten Befehl, der string enthält
^sting1^string2
wiederholt den letzten Befehl, wobei sting1 doch string2 ersetzt wird
In order to optimize the website and to continuously improve it, this site uses cookies. By continuing to use the website, you consent to the use of cookies.Ok