Autor: Sebastian Viereck
Wenn man untersuchen will, was an der Kommunikation vom lokalen Rechner und Server bei XDebug nicht funktioniert, kann man sich den Traffic anschauen auf dem Port 9000, der am Server ankommt:
watch -n 1 "netstat | grep 9000" //Ausgabe Every 1.0s: netstat | grep 9000 Tue Feb 7 16:01:50 2017 tcp 0 0 name:58572 host.server:9000 ESTABLISHED
und am lokalen PC kann man den Traffic beobachtet:
C:\>netstat 1 | find /i "9000" //Ausgabe TCP 172.17.20.65:9000 server:58440 HERGESTELLT TCP 172.17.20.65:9000 server:58440 HERGESTELLT
Wenn Xdebug bis zum lokalen System kommt, erhält man eine Ausgabe wie oben sichtbar (Windows).
Wenn man einen kurzen PHP Befehl ausführen will auf der Konsole, kann man mit dem –run Parameter Code schnell und unkompliziert ausführen
php -r "echo 'hello world';" //Ausgabe hello world
Um alle Dateien zu löschen, die einem bestimmten Regex entsprechen, kann man find benutzen:
find . -type f -iname "*error.log\.?" //findet: xxerror.log.1 yyyError.log.2 fatalError.log.1
Löschen kann man die gefundenen Dateien mittels des Linux Befehls:
find . -type f -iname "*error.log\.?" -exec rm {} \;
Stress Testing Tools
Zum Stress- bzw. Last-Testen von PHP Applikationen kann man das Tool Apache bench oder Seige benutzen.
Damit lässt sich das Verhalten einer Applkation unter hoher Last testen.
Ein sehr einfaches und gutes Tool für das Server Management von PHP Applikationen ist Laravel Forge, mit dem man seine App auf AWS, Digital Ocean oder Linode betreiben kann inkl.
- Load Balancing
- Cron Jobs
- Domain-Management
- SSL Zertifikate
- Queues
PHP asynchornen Thread starten
Mit PHP kann man nativ keine asynchronen Threads starten, aber über das Betriebsystem natürlich schon. Mit dem Linux command „ab“ kann man sehr einfach einen neuen Thread erstellen und langlaufende Aktionen auslagern. Zum Escapen von shell Argumente kann mn die Funktion escapeshellarg benutzen.
exec('echo "php create-report.php" | at now');
Ich habe beim Makro scheiben mit dem Mac einen Fehler bekommen, den ich nicht beheben konnte, weil dieser nicht am Code lag:
Fehler beim Kompilieren: Ungültiges Zeichen
Die Lösung war, den „fehlerhaften“ Code nochmals abzutippen, dann ging es. Meine Erklärung ist, das ein im Editor nicht angezeites Zeichen mit in den Code gekommen ist.
VBA Regex Lite mit Like
Native in VBA sind Regex leider nicht möglich, sondern nur über eine ActiveX Bibliothek erhätlich. Wenn man auch für Mac programmieren will, kommt dies nicht in Frage. Statt dessen kann man den Regex Lite befehl „Like“ benutzen, mit dem ähnliche abegspeckte Operationen machen kann.
Bsp.
success = text Like "T-#########-#" 'matches: 'T-123456789-1 success = text Like "[0-9a-z][0-9a-z]" 'matches: '1a, 2b
Um Latenz Probleme bei Redis zu analysieren, kann man das eingebaute Latency Tool von redis-cli benutzen, mit dem um 100 Requests pro Sekunde auf den Redis gepingt werden und man die Antwortszeit analysieren kann.
Konsolen Bsp:
Im Intervall von i=10 Sekunden auf localhost getestet
redis-cli --latency-history -i 10 -h 127.0.0.1 -p 6379
Output:
min: 0, max: 10, avg: 0.89 (906 samples) -- 10.01 seconds range min: 0, max: 32, avg: 1.44 (862 samples) -- 10.00 seconds range min: 0, max: 6, avg: 0.50 (939 samples) -- 10.00 seconds range min: 0, max: 7, avg: 0.47 (941 samples) -- 10.01 seconds range min: 0, max: 12, avg: 0.47 (942 samples) -- 10.00 seconds range min: 0, max: 137, avg: 2.70 (779 samples) -- 10.01 seconds range min: 0, max: 119, avg: 5.92 (626 samples) -- 10.06 seconds range min: 0, max: 2389, avg: 7.31 (572 samples) -- 10.00 seconds range min: 0, max: 14, avg: 0.64 (926 samples) -- 10.00 seconds range min: 0, max: 9, avg: 0.50 (938 samples) -- 10.01 seconds range min: 0, max: 16, avg: 0.47 (941 samples) -- 10.01 seconds range min: 0, max: 21, avg: 0.56 (933 samples) -- 10.01 seconds range min: 0, max: 23, avg: 0.56 (933 samples) -- 10.01 seconds range min: 0, max: 150, avg: 1.95 (827 samples) -- 10.01 seconds range min: 0, max: 131, avg: 4.22 (696 samples) -- 10.01 seconds range min: 0, max: 131, avg: 7.06 (581 samples) -- 10.01 seconds range min: 0, max: 4136, avg: 10.33 (488 samples) -- 10.01 seconds range min: 0, max: 17, avg: 1.15 (886 samples) -- 10.02 seconds range min: 0, max: 18, avg: 0.88 (906 samples) -- 10.01 seconds range min: 0, max: 11, avg: 0.61 (928 samples) -- 10.00 seconds range min: 0, max: 12, avg: 0.55 (936 samples) -- 10.01 seconds range min: 0, max: 9, avg: 0.51 (937 samples) -- 10.01 seconds range
Hier kann man gut sehen, dass die Probleme mit einem Abstand von 60 Sekunden auftreten. Dies lag in dem Fall daran, dass Redis alle 60s sich selber auf die Festplatte persistiert hat. Die entsprechende Option in den redis.conf lautete:
save 60 1000
und mit der Option
save ""
kann das persistieren auf der Festplatte ausgeschaltet werden.
Aber auch die Option
appendonly yes
musste auf „no“ gesetzt werden, weil es dadurch auch auf zu viele Schreibzugriffe kam.
