Christian Seiler: Optimierung bzgl. Speicherauslastung bei mehreren Prozessen

Beitrag lesen

Hallo Dennis,

Deshalb überlege ich mir, ob ich das irgendwie optimieren kann. Zuerst habe ich folgendes ausprobiert: Ein PHP Script erstellt, welches nur in einer Endlosschleife sleep(10) verwendet hat, und siehe da - alleine das sind schon 2,9% des RAMs.

Tja, dann kommt der Overhead von PHP. Du könntest Dir ein PHP-Binary kompilieren, das ausschließlich die Extensions enthält, die Du wirklich brauchst, dann wäre der Overhead natürlich geringer. Oder Du könntest die Extensions als Shared Libraries kompilieren (gibt irgend so eine configure-Option bei PHP, unter Gentoo kannst Du, falls Du dev-lang/php als Ebuild verwendest, das USE-Flag »sharedext« setzen), dann würden sie nur einmal geladen werden, auch wenn multiple PHP-Prozesse laufen.

Und dann wäre noch die Frage zu klären, wie viel denn 2,9% tatsächlich sind. Wenn Du 128 MiB RAM hast, dann sind 2,9% 3.71 MiB - was IMHO noch vertretbar wäre. Bei 1 GiB RAM wären es dagegen schon 29,7 MiB - was dann doch etwas viel wäre.

Also scheint PHP soviel Overhead mitzubringen. Kann ich das irgendwie optimieren, indem ich einen Kern-PHP-Prozess mache, der sich dann dreimal forked? Wie auch immer? Oder bringt das nichts/kann das nichts bringen?

Wenn Du das PHP-Script dreimal fork()st, dann ist das von der Speicherbelastung her genauso, als ob Du drei separate Prozesse starten würdest. Bei fork() wird der komplette Speicher des Prozesses einfach kopiert (naja, genaugenommen wird er das aus Performancegründen erst beim erste Schreibzugriff des Kindprozesses auf den Speicher, sog. »copy-on-write«, aber da Du ja den Prozess nicht sofort mit exec() überschreibst nach dem fork(), wird der Speicher bei Dir auf jeden Fall kopiert werden).

Viele Grüße,
Christian

--
"I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone." - Bjarne Stroustrup
0 111

PHP-CLI, in PHP auf kill reagieren

Dennis
  • php
  1. 0
    Geplagter
    1. 0
      Dennis
  2. 1
    Tom
  3. 0
    Manuel B.
    1. 0
      Tom
      1. 0
        Manuel B.
      2. 0
        eddi
    2. 0
      Dennis
      1. 0
        Manuel B.
        1. 0
          Dennis
          1. 0
            Manuel B.
        2. 0
          eddi
          1. 0
            Manuel B.
    3. 2
      dedlfix
      1. 0
        Tom
        1. 0
          eddi
          1. 0
            Dennis
            1. 0
              Christian Seiler
              1. 0
                Dennis
                1. 0
                  Tom
                  1. 0
                    Christian Seiler
      2. 0

        Funktioniert, aber ich habs noch nicht ganz verstanden...

        Dennis
        1. 0
          Tom
          1. 0

            Noch eine Frage

            Dennis
            • webserver
            1. 0
              Tom
              1. 2
                Christian Seiler
                1. 0
                  Tom
                  1. 0
                    Christian Seiler
                    1. 0
                      Tom
                      1. 0

                        Break, CTRL-C, SIGINT, usw.

                        Tom
                        1. 0
                          Christian Seiler
                      2. 0
                        Christian Seiler
            2. 2
              Christian Seiler
              1. 0
                Dennis
                1. 0
                  Christian Seiler
                  1. 0
                    Dennis
                    1. 0
                      Christian Seiler
                      1. 0
                        eddi
                        1. 0
                          Christian Seiler
                          1. 0

                            sleep() vs. SIGSTOP

                            Dennis
                            1. 0
                              Christian Seiler
                              1. 0
                                Dennis
                                1. 0
                                  Christian Seiler
                      2. 0
                        Christian Seiler
          2. 0
            Tom
            1. 0
              Christian Seiler
              1. 0
                Tom
                1. 0
                  Christian Seiler
                  1. 0
                    Tom
                    1. 0
                      Christian Seiler
                      1. 0
                        Manuel B.
                        1. 0
                          Tom
                          1. 0
                            Christian Seiler
                          2. 0
                            Manuel B.
                      2. 0
                        Tom
                        1. 0
                          Christian Seiler
                          1. 0
                            Dennis
                            1. 1
                              Christian Seiler
        2. 1
          Christian Seiler
          1. 0
            Dennis
            1. 0
              eddi
              1. 0
                Dennis
                1. 0
                  Manuel B.
                  1. 0
                    eddi
                    1. 0
                      Manuel B.
                      1. 0
                        Dennis
                        1. 0
                          Manuel B.
                          1. 0
                            Dennis
                            1. 0
                              Manuel B.
                              1. 0
                                Dennis
                                1. 0
                                  Manuel B.
                                  1. 0
                                    Dennis
                                    1. 0
                                      Manuel B.
                  2. 0
                    Dennis
                    1. 0
                      Manuel B.
            2. 0
              Christian Seiler
              1. 0
                Dennis
                1. 0
                  Christian Seiler
                  1. 0
                    Dennis
  4. 0

    pcntl_fork() und posix_setsid(), was passiert da?

    Dennis
    1. 0
      Dennis
  5. 0

    Optimierung bzgl. Speicherauslastung bei mehreren Prozessen

    Dennis
    1. 0
      Christian Seiler
      1. 0
        Dennis
        1. 0
          eddi
          1. 0
            Dennis
            1. 0
              eddi
              1. 0
                Dennis
                1. 0
                  eddi
                  1. 0
                    Dennis
                    1. 0
                      eddi
      2. 0
        Manuel B.
        1. 0
          eddi
  6. 0

    exec() wartet nicht obwohl aufgerufenes Script sich forked

    Dennis
    1. 0
      eddi
    2. 0
      Christian Seiler
      1. 0
        Dennis
        1. 0
          Christian Seiler
          1. 0
            Christian Seiler
            1. 0
              Dennis
              1. 0
                Christian Seiler
                1. 0
                  Dennis
                  1. 0
                    Dennis
                    1. 0
                      Christian Seiler
                      1. 0

                        mod_auth_pam - Funktionsweise

                        Dennis
                        • webserver
                        1. 0
                          eddi
                          1. 0
                            Dennis
                            1. 0
                              Dennis
                              1. 0
                                eddi
                      2. 0

                        mod_authnz_external und pwauth

                        Dennis