Serverlast bei Upload und Verkleinerung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Serverlast bei Upload und Verkleinerung

    Hallo,

    wir haben lange nach der Ursache für die teilweise sehr hohe Lasz auf unserem Server gesucht.
    Wie es scheint lahmt der Server ( 1 GB RAM , 2800 Mhz) immer dann wenn grosse Bilder hochgeladen werden.
    Als Upload-Limit sind 2 MB angegeben, da es sich um eine Community handelt in der die Anwender nicht besonders viel Ahnung von Technik haben und sicher nicht viele wissen wie man ein Bild verkleinert ;-)

    Nach dem Upload werden die Bilder mit der GDlib auf Format gebracht.
    Das hochgeladene Bild wird auf eine Gesamthöhe bzw. Gesamtbreite von maximal 500px getrimmt (Qualität 75) und es wird gleichzeitig ein Thumbnail mit maximal 150px höhe bzw. breite erstellt.
    Diese beiden Grafiken werden dann per FTP auf einem entfernten Server gespeichert.
    Pro Stunde werden im Schnitt etwa 40 bis 50 Bilder hochgeladen.

    Meine Frage jetzt?
    Ist es einerseits wirklich möglich das der Uploa so viele Ressourcen frisst?
    Und wenn ja, hat jemand Ideen wie ich das optimieren könnte bzw. welcher Schritt ist letztendlich der Ressourcenfressende? Der Upload? Das Verkleinern? Der FTP-Transfer? Wie könnte ich etwas verändern?
    Zuletzt geändert von Wannabe; 19.07.2007, 01:05.

  • #2
    upload? nein. bildbearbeitung? viel eher. aber bei 40-50 bilder pro stunde kann davon nicht die rede sein.

    was bedeutet "lahmt"? was steht dazu in den logs? welche prozesse laufen auf dem rechner und was machen sie in dieser zeit? was ergaben deine eigenen messungen der pro routine benötigten zeiten? was bildet in dieser zeit den traffic?

    Kommentar


    • #3
      OffTopic:

      Ich war drauf und dran, ImageMagick als performantere Lösung zu empfehlen, wollte mich aber (mangels eigener Messungen, nur subjektive Eindrücke) vorher absichern und finde das hier:
      http://blog.liip.ch/archive/2005/10/...ick-vs-gd.html
      interessant. In den UCN wird aber eine interessante Alternative genannt: djpeg, cscale und cjpeg. Vielleicht ist das was, falls der Hauptschuldige das Skalieren ist.

      Kommentar


      • #4
        Vielleicht ist das was, falls der Hauptschuldige das Skalieren ist.
        Aber bei 40-50 Bildern pro Stunde bei einem derartigen Server kann ich mir das nicht recht vorstellen. Selbst wenn das skalieren jedes mal fünf Sekunden dauern würde - pro Upload bleibt über eine Minute Zeit zum verarbeiten, der Upload an sich verursacht sicherlich keine Serverlast. Das Problem liegt wohl woanders, vielleicht werden Bilder noch öfter skaliert oder die Anzeige durchläuft bei jedem Vorgang irgendwelche großen Schleifen?
        Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

        Kommentar


        • #5
          Original geschrieben von pekka
          OffTopic:

          Ich war drauf und dran, ImageMagick als performantere Lösung zu empfehlen, wollte mich aber (mangels eigener Messungen, nur subjektive Eindrücke) vorher absichern und finde das hier:
          http://blog.liip.ch/archive/2005/10/...ick-vs-gd.html
          interessant. In den UCN wird aber eine interessante Alternative genannt: djpeg, cscale und cjpeg. Vielleicht ist das was, falls der Hauptschuldige das Skalieren ist.
          imagemagick ist aber in sofern besser, als dass es auch mit exotischeren Bildformaten klar kommt (im Vergleich zu GD - die anderen beiden kenne ich nicht)

          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
          Wie man Fragen richtig stellt

          Kommentar


          • #6
            Mach Zeitmessungen in den Skripten und guck welche am längsten bei der Ausführung brauchen.
            Was sagt top? Irgendwas sonderbares?
            Was sagt die Datenbank? Slow-Query-Log? Irgendwas an Killern dabei?
            Swappt der Server eventuell wenn er die Bilder rendert? Dann sollten die anderen Applikationen darauf geeicht werden, dass ein paar MB Ram frei bleiben für die Konvertierung~

            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
            Wie man Fragen richtig stellt

            Kommentar


            • #7
              Also jetzt gerade ist mal wieder am A*sch...
              Es geht gar nichts mehr...

              Ich hatte mir SysInfo 2.26 vor ein paar Tagen installiert und hab dort eben reingesehen...

              Leider kann ich mit den Werten relativ wenig anfangen, also poste ich mal die die mir jetzt gerade ins Auge stechen.
              Vielleicht hab ich ja Glück und es ist was gescheites dabei *gg*

              System:
              AMD Athlon(tm) 64 Processor 3700+
              Chip Mhz: 2200.16 (i686)
              Cache Grösse: 1024 KB
              System Bogomips: 4402.90

              ======================
              CPU Auslastung: 100%
              Physical Memory: 94%
              Disk Swap: 0%
              ======================

              Bei den laufenden Prozessen sticht besonders eines direkt ins Auge:
              USER: mysql
              CPU 3.0%
              %MEM: 13.2%
              VSZ: 238.16 MB
              STAT: S
              Time: 00:42
              Command:
              /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-locking --open-files-limit=8192 --port=3306 --socket=/var/run/mysqld/mysqld.sock

              Dann gibt es noch 6 mal COMMAND " spamd child" mit jeweils etwa 25 bis 30 MB VSZ-Wert und 2 bis 3 Prozent CPU-Last.

              Das sind die großen Werte die ich dort sehe...
              Ist es normal das der VSZ-Wert so hoch ist...?
              Ich vermute gerade das es irgendwas mit MySql zu tun hat.
              Auch wenn ich nicht weiss was der hohe VSZ-Wert bedeutet, fällt mir doch auf das eine Seite auf diesem web die KEINEN Zugriff auf die Datenbank hat sofort geladen wird, eine andere, welche erst datenbankabfragen machen muss lädt sich gerade tot.
              Kann mir jemand sagen wie ich euch (ohne root-zugriff) wichtige Daten zeigen kann...?

              Kommentar


              • #8
                Also 200 MB VSZ sind mMn okay.
                Das klingt jetzt ein wenig so als würde die Datenbank lahmen und daraufhin der apache nicht rund laufen und so die hohe CPU-Auslastung hervorbringen...
                Schalt mal das slow-query-log ein, benutze mytop um dir anzuschauen was der DB-Server macht und finde raus warum der so lahmt (mysqlreport leistet gute Dienste um raus zu finden ob keycache und buffer vernünftig genutzt wird und die Werte okay sind)

                [edit]
                existiert nur der eine mysql-Prozess?
                Zuletzt geändert von ghostgambler; 19.07.2007, 02:00.

                Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                Wie man Fragen richtig stellt

                Kommentar


                • #9
                  Also erstmal kurz vorab:

                  Ja, das ist der einzige MySql-Prozess der läuft.
                  Und es hat auch sonst kein anderer Prozess annährend so hoge Werte.
                  Wenn ich über phpMyAdmin nach den MySql-Prozessen schaue (SHOW PROCESSLIST) sehe ich gerade jede menge Prozesse die bereits seit mehreren Minuten oder auch erst kurzfristig als "Sleep" dort stehen und der Aufbau einer Seite auf meiner Domain dauert gefühlt an die 2 bis 3 Minuten :-(
                  Der linke Teil (die statische Navigation) baut sich sofort auf, der dynamische Content aber dauert wie gesagt ewig.

                  SHOW STATUS gibt in phpMyAdmin übrigens folgendes aus:

                  Variable_name Value
                  Aborted_clients 20
                  Aborted_connects 8
                  Bytes_received 10066497
                  Bytes_sent 66538594
                  Com_admin_commands 2
                  Com_alter_table 0
                  Com_analyze 1
                  Com_backup_table 0
                  Com_begin 0
                  Com_change_db 11021
                  Com_change_master 0
                  Com_check 19677
                  Com_commit 0
                  Com_create_db 0
                  Com_create_function 0
                  Com_create_index 0
                  Com_create_table 0
                  Com_delete 685
                  Com_delete_multi 0
                  Com_drop_db 0
                  Com_drop_function 0
                  Com_drop_index 0
                  Com_drop_table 0
                  Com_flush 0
                  Com_grant 0
                  Com_ha_close 0
                  Com_ha_open 0
                  Com_ha_read 0
                  Com_insert 2380
                  Com_insert_select 216
                  Com_kill 14
                  Com_load 0
                  Com_load_master_data 0
                  Com_load_master_table 0
                  Com_lock_tables 392
                  Com_optimize 224
                  Com_purge 0
                  Com_rename_table 0
                  Com_repair 2
                  Com_replace 14
                  Com_replace_select 0
                  Com_reset 0
                  Com_restore_table 0
                  Com_revoke 0
                  Com_rollback 0
                  Com_savepoint 0
                  Com_select 14829
                  Com_set_option 327
                  Com_show_binlog_events 0
                  Com_show_binlogs 35
                  Com_show_create 0
                  Com_show_databases 17
                  Com_show_fields 2
                  Com_show_grants 10
                  Com_show_keys 0
                  Com_show_logs 0
                  Com_show_master_status 0
                  Com_show_new_master 0
                  Com_show_open_tables 0
                  Com_show_processlist 26
                  Com_show_slave_hosts 0
                  Com_show_slave_status 0
                  Com_show_status 2
                  Com_show_innodb_status 0
                  Com_show_tables 118
                  Com_show_variables 1
                  Com_slave_start 0
                  Com_slave_stop 0
                  Com_truncate 0
                  Com_unlock_tables 392
                  Com_update 8129
                  Com_update_multi 0
                  Connections 9215
                  Created_tmp_disk_tables 45
                  Created_tmp_tables 1026
                  Created_tmp_files 3
                  Delayed_insert_threads 0
                  Delayed_writes 0
                  Delayed_errors 0
                  Flush_commands 1
                  Handler_commit 0
                  Handler_delete 1958
                  Handler_read_first 3828
                  Handler_read_key 6016679
                  Handler_read_next 33137815
                  Handler_read_prev 14219
                  Handler_read_rnd 362645
                  Handler_read_rnd_next 30060705
                  Handler_rollback 0
                  Handler_update 4828327
                  Handler_write 309354
                  Key_blocks_used 124690
                  Key_read_requests 4689705
                  Key_reads 178631
                  Key_write_requests 22075
                  Key_writes 10069
                  Max_used_connections 19
                  Not_flushed_key_blocks 0
                  Not_flushed_delayed_rows 0
                  Open_tables 512
                  Variable_name Value
                  Open_files 995
                  Open_streams 0
                  Opened_tables 22313
                  Questions 90479
                  Qcache_queries_in_cache 3953
                  Qcache_inserts 11423
                  Qcache_hits 22644
                  Qcache_lowmem_prunes 0
                  Qcache_not_cached 3347
                  Qcache_free_memory 8406976
                  Qcache_free_blocks 327
                  Qcache_total_blocks 9294
                  Rpl_status NULL
                  Select_full_join 220
                  Select_full_range_join 2
                  Select_range 1767
                  Select_range_check 0
                  Select_scan 3672
                  Slave_open_temp_tables 0
                  Slave_running OFF
                  Slow_launch_threads 0
                  Slow_queries 1
                  Sort_merge_passes 0
                  Sort_range 1741
                  Sort_rows 2873815
                  Sort_scan 1998
                  Table_locks_immediate 53053
                  Table_locks_waited 4
                  Threads_cached 0
                  Threads_created 9214
                  Threads_connected 9
                  Threads_running 1
                  Uptime 7451



                  slow-query-log kann ich doch nur per root aktivieren, oder seh ich das falsch?
                  Root-Zugriff hab ich nämlich leider nicht...
                  Zuletzt geändert von Wannabe; 19.07.2007, 02:37.

                  Kommentar


                  • #10
                    slow-query-log kann ich doch nur per root aktivieren, oder seh ich das falsch?
                    Wenn du MySQL starten (und stoppen) kannst geht das.
                    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                    Kommentar


                    • #11
                      Original geschrieben von Wannabe
                      Ja, das ist der einzige MySql-Prozess der läuft.
                      Dann sind das mMn gute Werte - denn das ist der komplette Server dann

                      Wenn ich über phpMyAdmin nach den MySql-Prozessen schaue (SHOW PROCESSLIST) sehe ich gerade jede menge Prozesse die bereits seit mehreren Minuten oder auch erst kurzfristig als "Sleep" dort stehen und der Aufbau einer Seite auf meiner Domain dauert gefühlt an die 2 bis 3 Minuten :-(
                      Ja, es stehen für gewöhnlich viele Threads auf sleep... was interessant sind sind die Threads, die auch was TUN!
                      mytop, runterladen, starten, i drücken
                      Irgendein Query für lange Zeit ganz oben?

                      SHOW STATUS gibt in phpMyAdmin übrigens folgendes aus:
                      x_X
                      Das kann ja keiner lesen...
                      http://hackmysql.com/mysqlreport
                      runterladen, laufen lassen mit --all, output posten
                      Da sind die Werte schon wunderbar verrechnet.


                      Den Output von SHOW GLOBAL VARIABLES bitte gleich auch noch ^^
                      Zuletzt geändert von ghostgambler; 19.07.2007, 14:23.

                      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                      Wie man Fragen richtig stellt

                      Kommentar


                      • #12
                        Entschuldigt bitte, aber ich hab keine Ahnung wie ich slow-query-log aktivieren und myTop installieren soll.
                        Ich habe normalen FTP-Zugang, Zugang zu MySql und Confixx.
                        Es ist ein managed Server

                        Kommentar


                        • #13
                          Original geschrieben von Wannabe
                          Entschuldigt bitte, aber ich hab keine Ahnung wie ich slow-query-log aktivieren und myTop installieren soll.
                          Ich habe normalen FTP-Zugang, Zugang zu MySql und Confixx.
                          Es ist ein managed Server
                          Dann wende dich an den Support, der wird ja schließlich für die Lösung solcher Probleme bezahlt...

                          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                          Wie man Fragen richtig stellt

                          Kommentar


                          • #14
                            Genau DAS ist ja das Problem, die wissen nämlich nicht weiter ;-)

                            Okay, wenn ich jetzt slow-query-log aktivieren und myTop und mysqlreport installieren lasse, kann ich darauf denn nachher ganz normal über den Browser zugreifen?
                            Wohl nicht, was...?

                            Kommentar


                            • #15
                              hast du endlich zeitmessungen durchgeführt, um regelmäßigkeiten zu entdecken und den flaschenhals zu lokalisieren?

                              Kommentar

                              Lädt...
                              X