Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Entwickler>AppleScript - Alle Prozesse mit bestimmten Prozessnamen regelmäßig killen?

AppleScript - Alle Prozesse mit bestimmten Prozessnamen regelmäßig killen?

Termi
Termi16.06.1814:43
Ich vermute mal, wer sich mit AppleScript auskennt, wird meine Frage einfach beantworten können: Ich habe seit Update auf MAMP 4.x seit Jahren das Problem, dass die Anzahl der httpd Prozesse nach dem Start von MAMP permanent steigt, bis deren maximale Anzahl erreicht ist (glaube 800) und macOS nichts Neues mehr starten kann. Die Entwickler sind ratlos, da es offensichtlich ein Einzelschicksal ist, das sich auch durch komplettes De- und Neuinstallieren nicht bei mir beheben ließ.

Nun will ich gerne ein AppleScript laufen lassen, dass stündlich prüft, ob die Anzahl der httpd Prozesse größer ist, als 100 und dann alle per "killall httpd" beendet. Da ich von AppleScript null Ahnung habe, würde ich mich um ein Script oder den Verweis auf sehr ähnliche Scripts freuen.

Danke schonmal!
0

Kommentare

Duck Dodgers16.06.1814:53
Macht es nicht sinn zu überlegen, warum das passiert und dann das Problem richtig zu beheben. Sollte ja nicht sein, dass das passiert 🤔
+3
Dom Juan16.06.1815:16
Mal ganz vorsichtiges abklopfen, nicht falsch verstehen. Bei der Deinstallation hast Du auch alle zugehörigen Ordner, auch die in den Tiefen des Systems, gelöscht? Oder irgendwelche Plugins des Programmes? Ich kenne MAMP jetzt gar nicht, weiß also nicht mal mit Genauigkeit, ob es sowas gibt.
Wäre es eine vorläufige Lösung, die httpd Prozesse auf zB 100 zu begrenzen, statt 800?
Hier sind ein paar Scripts, die Prozesse nach einer bestimmten Zeitspanne beenden. Ist vielleicht eine Übergangslösung, bis Dir jemand qualifizierteres als ich weiterhelfen konnte.
0
Termi
Termi16.06.1815:39
Ich bin die Deinstallation von MAMP Pro mit den Entwicklern durchgegangen und habe dann sauber neu installiert. Ergebnis war das Gleiche. Da ich auch nach mehreren Updates von MAMP Pro nicht mehr glaube, dass es besser wird und den Aufwand einer anderen Lösung scheue, wollte ich es jetzt Quick&Dirty lösen.

Wie soll ich denn die maximalen Prozesse für einen Prozessnamen begrenzen? Wüsste nicht, wie das geht, wenngleich das natürlich eine prima Lösung wäre. Ich weiß nur, dass die Gesamtanzahl von Prozessen beschränkt ist auf 800. Damit das System weiterhin neue Prozesse starten kann, müsste ich diese erhöhen, was aber wenig sinnvoll ist.

Als Beispiel hatte ich auf der verlinkten Seite gefunden
kill -9 $(ps -eo comm,pid,etimes | awk '/^httpd/ {if ($3 > 300) { print $2}}')

Da bekomme ich aber eine Fehlermeldung ps: etimes not found
0
sunni16.06.1815:49
Vielleicht ist nicht MAMP Schuld an den vielen httpd Prozessen, vielleicht ist es eine fehlerhafte Config. Oder das, was zu zu hosten versuchst.

Der Post https://stackoverflow.com/a/15922651 könnte dir bei der Problemlösung besser helfen, als die Anzahl der httpd Prozesse künstlich zu begrenzen.
+2
Termi
Termi16.06.1815:56
Schaue ich mir mal an. Danke. Bis dahin habe ich eine elegante Lösung für meinen rabiaten Ansatz gefunden:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>killhttpd</string>
  <key>ProgramArguments</key>
  <array>
    <string>killall</string>
    <string>httpd</string>
  </array>
  <key>StartInterval</key>
  <integer>3600</integer>
</dict>
</plist>

als killhttpd.plist in ~/Library/LaunchAgents speichern
0
sierkb16.06.1816:52
Termi
Ich habe seit Update auf MAMP 4.x seit Jahren das Problem, dass die Anzahl der httpd Prozesse nach dem Start von MAMP permanent steigt, bis deren maximale Anzahl erreicht ist (glaube 800) und macOS nichts Neues mehr starten kann. Die Entwickler sind ratlos, da es offensichtlich ein Einzelschicksal ist, das sich auch durch komplettes De- und Neuinstallieren nicht bei mir beheben ließ.

Was hältst Du von der Idee, den offenbar verwendeten Apache Webserver per Konfigurations-Optionen in der Server-Konfiguration so zu konfigurieren, dass er sich so verhält und dem Workload entspricht bzw. soviel Prozesse und Threads eröffnet bzw. diesbzgl. Obergrenzen setzt, wie Du/ihr es gerne haben möchtet? Ich meine, das geht und ist möglich.

Hierzu stehen seit Apache 2.2 (und seit 2.4 nochmal verbessert) verschiedene MPMs (Multi-Prozessing-Module) zur Verfügung, die je nach jeweiligem Einsatzzweck ausgewählt und einzeln konfiguriert/angepasst werden können: worker, event und prefork. Da kann genau vorkonfiguriert werden, wieviele Threads und Prozesse ggf. aufgemacht werden sollen/dürfen, können Prozess- und Thread-Anzahlen bzw. etwaige Prozess-, in-Prozess sowie Thread-Obergrenzen fest vorgegeben/vergeben werden, wieviele Clients zugreifen dürfen, Speicherobergrenzen vergeben werden etc.

Apache 2.4 Manual: Kernfunktionen und Multi-Processing-Module
Apache
mpm_common
Eine Sammlung von Direktiven, die in mehr als einem Multi-Processing-Modul (MPM) implementiert sind.

event
A variant of the worker MPM with the goal of consuming threads only for connections with active processing

prefork (evtl. und meist per default voreingestellt)
Implementiert einen im Voraus forkenden Webserver ohne Thread-Unterstützung

worker
Multi-Processing-Modul, das einen Hybrid-Webserver mit Multi-Thread und Multi-Prozess-Unterstützung implementiert
Apache
Der Server läßt sich besser auf die Bedürfnisse der jeweiligen Website anpassen. Sites beispielsweise, die eine hohe Skalierbarkeit benötigen, können ein Threaded-MPM wie worker oder event wählen, während Sites, die Stabilität oder Kompatibilität mit älterer Software erfordern, prefork wählen können.

Apache 2.4 Manual: Multi-Processing-Module (MPMs)
Apache 2.4 Manual: Apache Performance Tuning

Apache 2.4 Manual: Allgemeine Direktiven der Apache-MPMs
Apache 2.4 Manual: Apache MPM event
Apache 2.4 Manual: Apache-MPM prefork
Apache 2.4 Manual: Apache MPM worker


Habt ihr das schon alles gemacht und durchprobiert? Wenn nein, das evtl. mal machen und ausprobieren?
Hope, it helps.
+1
Termi
Termi17.06.1815:50
Danke für den Hinweis. MAMP unterstützt nur Apache 2.2.34. Habe mal bei den Entwicklern gefragt, warum nicht die v2.4 supported wird.
0
sierkb17.06.1816:51
Termi
Danke für den Hinweis. MAMP unterstützt nur Apache 2.2.34. Habe mal bei den Entwicklern gefragt, warum nicht die v2.4 supported wird.

Das ist zwar suboptimal und sehr schade, dass MAMP da so hinterherhinkt (Apache 2.2 End-of-Life: 01.01.2018, wird nicht mehr weiterentwickelt, aktuell ist seit längerem die 2.4-Linie), ein aktueller Apache 2.4.x wäre sicher besser; macOS 10.13.5 hat serienmäßig einen Apache 2.4.x an Bord, derzeit die aktuelle Version 2.4.33.
Aber auch Apache der 2.2er-Liene dürfte das alles bereits können, hat die Worker- und Prefork-MPM (ändere obige Apache-Doku-URLs von Version 2.4 zu Version 2.2, und auch dort findest Du dann die diesbzgl. Konfigurations-Optionen für die Worker-/Prefork-MPM). Oder sind die Konfigurations-Optionen bzgl. Prozess-, Kind-Prozess und Thread-Management und der Möglichkeit, Obergrenzen zu definieren, erst mit 2.4 hinzugekommen und bei 2.2 noch nicht drin? Was sagt die 2.2er-Doku an der Stelle zu dem Thema (bin grad' zu faul zum Nachschauen)?
+1
Termi
Termi17.06.1819:19
Bin auch gerade zu faul zum Nachschauen, da mein Workaround funktioniert. Wenn MAMP den aktuellen Apache unterstützt, schaue ich mir die Config nochmal an. Danke für den Hinweis darauf.
0
Jörg H.18.06.1804:57
Was passiert, wenn du den in macOS integrierten Apache benutzt und nicht MAMP?

Eine Top-Anleitung zur Installation und Konfiguration von Apache, MySQL & Co findest du hier: https://mallinson.ca/osx-web-development/
+1
Joe12
Joe1218.06.1810:57
für das apple script würde ich den Befehl "do shell script " " "benutzten damit kann man Terminal befehle ausführen.

Das ganze script würde dann so aussehen:
repeat
    delay 3600
    do shell script "killall httpd"
end repeat
0
Termi
Termi22.06.1821:05
@Jörg
Ich möchte mehr Zeit mit Programmieren und weniger mit dem Updaten der einzelnen Module verbringen. Daher der bequeme Weg über eine entsprechende Umgebung.

@Joe12
Danke. Da ist ja einfach. Genau das hatte ich ursprünglich gesucht. Habe das Problem ja mittlerweile mit der plist relativ elegant umgangen und bin zufrieden. Wußte vor meiner Suchanfrage gar nicht, dass das auf dem Mac auch mittels plist möglich ist.
0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.