Whatsup - לינוקס, תוכנה חופשית וקוד פתוח בעברית

לינוקס ושרתים - שיפור ביצועי שרת Apache + Mysql

COM64 - 14/09/2015 - 09:28
נושא ההודעה: שיפור ביצועי שרת Apache + Mysql
נתחיל בפרטים של השרת:
3.2.0-4-amd64 #1 SMP Debian 3.2.68-1+deb7u3
Mysql 5.5.44-0+deb7u1
Apache 2.2.22-13+deb7u6

4 CPU
4GB RAM

המטרה היא לקבל תשובה מהשרת תוך פחות מ-200ms, זה מה שגוגל מגדיר כזמן סביר. לשרת ישנה בעית ביצועים בגלל גישה איטית למערך הדיסקים בגלל עומס של כמות מכונות וירטואליות על אותה חומרה פיזית.

מה אני מחפש?
1. "לשכנע" את mysql לנצל טוב יותר את הזיכרון.
2. להגדיר את Apache לבצע Minify לקבצי טקסט (html, js, css)

קצת פרטים נוספים:

קוד:
cat /proc/meminfo | grep -i huge
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB


לאחר רצף הפקודות הבא:
קוד:
echo 20 > /proc/sys/vm/nr_hugepages
echo 107 > /proc/sys/vm/hugetlb_shm_group
echo 1024 > /proc/sys/kernel/shmmax
echo 384 > /proc/sys/kernel/shmall
cat /proc/meminfo | grep -i huge

AnonHugePages:         0 kB
HugePages_Total:      20
HugePages_Free:       20
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB


לקובץ my.cnf נוספה האופציה large-pages
לקובץ /usr/bin/mysqld_safe נוספה האופציה ulimit -l unlimited

לקובץ apache.conf נוספה השורה הבאה:
קוד:
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript


אך הקבצים עדיין אינם "שטוחים".

אני לא רואה עליה בשימוש בזיכרון או שיפור בתגובה של השרת.
Anonymous - 14/09/2015 - 11:39
נושא ההודעה:
עומס של מכונות וירטואליות על מכונה עם 4gb ram זה לא מתכון לביצועים ובכל הנוגע להגשת קבצים סטטים אפצי לא נחשב לשרת יעיל במיוחד.מה שפת התכנות שמעורבת פה? איך עשית את הניתוח שלפיו החלטת מה מקור הבעיה?

בכל מקרה לגבי Minify זו פעולה שעושים בדרך כלל כחלק מה-build של הפרוייקט, זה לא כל כך יעיל שאפצי יעשה את זה בעצמו אבל כדי שזה יקרה תצטרך להתקין mod מתאים. deflate עושה gzip לקבצים בזמן המשלוח שלהם לדפדפן זו פעולה ברוח דומה אבל זה לא Minify.

deflate לא משנה את התוכן של הקובץ אם הוא עושה את העבודה שלו אתה אמור לראות בדפדפן את ה-response header
קוד:
Content-Encoding:gzip

COM64 - 14/09/2015 - 15:13
נושא ההודעה:
השרת רץ על ג'ומלה עם מינימום תוספים. מעל ג'ומלה מותקנת חנות וירטואלית - Virtuemart ותוסף יחיד נוסף להכנסת קוד לתוך מוצרים. כל הרכיבים כולל מערכת ההפעלה מעודכנים לגרסאות האחרונות.

השרת הוירטואלי מקבל 4GB מתוך 64GB שיש לשרת המארח. אין בעיית זיכרון לשרת המארח, כך שאני יכול להוסיף זיכרון למכונה הוירטואלית הרלוונטית. גם משאבי CPU לא "חנוקים" על השרת המארח. הבעיה שאני מודע לה היא גישה איטית לדיסקים בגלל מכונות תובעניות נוספות שמתארחות על אותו שרת.

את המידע אני מקבל מכלי שגוגל מפרסמים בקישור הבא:
https://developers.google.com/speed/pagespeed/insights

העניין הוא שהם נותנים ל-Minify ציון, כלומר לעצם ביצוע הצמצום של הקובץ. כלומר גם אם Apache לא יבצע את זה באופן הכי יעיל, עדיין גוגל יתייחסו לביצוע הפעולה עצמה.

רשימת המודולים שאפצ'י מעלה:
קוד:
lrwxrwxrwx 1 root root   28 Jul  5  2014 alias.conf -> ../mods-available/alias.conf
lrwxrwxrwx 1 root root   28 Jul  5  2014 alias.load -> ../mods-available/alias.load
lrwxrwxrwx 1 root root   33 Jul  5  2014 auth_basic.load -> ../mods-available/auth_basic.load
lrwxrwxrwx 1 root root   33 Jul  5  2014 authn_file.load -> ../mods-available/authn_file.load
lrwxrwxrwx 1 root root   36 Jul  5  2014 authz_default.load -> ../mods-available/authz_default.load
lrwxrwxrwx 1 root root   38 Jul  5  2014 authz_groupfile.load -> ../mods-available/authz_groupfile.load
lrwxrwxrwx 1 root root   33 Jul  5  2014 authz_host.load -> ../mods-available/authz_host.load
lrwxrwxrwx 1 root root   33 Jul  5  2014 authz_user.load -> ../mods-available/authz_user.load
lrwxrwxrwx 1 root root   32 Jul  5  2014 autoindex.conf -> ../mods-available/autoindex.conf
lrwxrwxrwx 1 root root   32 Jul  5  2014 autoindex.load -> ../mods-available/autoindex.load
lrwxrwxrwx 1 root root   28 Sep 13 11:38 cache.load -> ../mods-available/cache.load
lrwxrwxrwx 1 root root   26 Jul  5  2014 cgi.load -> ../mods-available/cgi.load
lrwxrwxrwx 1 root root   30 Jul  5  2014 deflate.conf -> ../mods-available/deflate.conf
lrwxrwxrwx 1 root root   30 Jul  5  2014 deflate.load -> ../mods-available/deflate.load
lrwxrwxrwx 1 root root   26 Jul  5  2014 dir.conf -> ../mods-available/dir.conf
lrwxrwxrwx 1 root root   26 Jul  5  2014 dir.load -> ../mods-available/dir.load
lrwxrwxrwx 1 root root   26 Jul  5  2014 env.load -> ../mods-available/env.load
lrwxrwxrwx 1 root root   30 Sep 13 11:03 expires.load -> ../mods-available/expires.load
lrwxrwxrwx 1 root root   33 Sep 14 07:48 ext_filter.load -> ../mods-available/ext_filter.load
lrwxrwxrwx 1 root root   29 Sep 14 07:48 filter.load -> ../mods-available/filter.load
lrwxrwxrwx 1 root root   28 Jul  5  2014 geoip.conf -> ../mods-available/geoip.conf
lrwxrwxrwx 1 root root   28 Jul  5  2014 geoip.load -> ../mods-available/geoip.load
lrwxrwxrwx 1 root root   30 Sep 13 11:28 headers.load -> ../mods-available/headers.load
lrwxrwxrwx 1 root root   27 Jul  5  2014 mime.conf -> ../mods-available/mime.conf
lrwxrwxrwx 1 root root   27 Jul  5  2014 mime.load -> ../mods-available/mime.load
lrwxrwxrwx 1 root root   34 Jul  5  2014 negotiation.conf -> ../mods-available/negotiation.conf
lrwxrwxrwx 1 root root   34 Jul  5  2014 negotiation.load -> ../mods-available/negotiation.load
lrwxrwxrwx 1 root root   27 Jul  5  2014 php5.conf -> ../mods-available/php5.conf
lrwxrwxrwx 1 root root   27 Jul  5  2014 php5.load -> ../mods-available/php5.load
lrwxrwxrwx 1 root root   33 Jul  5  2014 reqtimeout.conf -> ../mods-available/reqtimeout.conf
lrwxrwxrwx 1 root root   33 Jul  5  2014 reqtimeout.load -> ../mods-available/reqtimeout.load
lrwxrwxrwx 1 root root   30 Aug 14  2014 rewrite.load -> ../mods-available/rewrite.load
lrwxrwxrwx 1 root root   31 Jul  5  2014 setenvif.conf -> ../mods-available/setenvif.conf
lrwxrwxrwx 1 root root   31 Jul  5  2014 setenvif.load -> ../mods-available/setenvif.load
lrwxrwxrwx 1 root root   29 Jul  5  2014 status.conf -> ../mods-available/status.conf
lrwxrwxrwx 1 root root   29 Jul  5  2014 status.load -> ../mods-available/status.load


להבנתי הפעלתי את כל המודולים הנדרשים לדחיסה וצמצום הקבצים.
אני יכול לבצע Minify ידני לרוב הקבצים אך הדבר ידרש לאחר כל עדכון של הרכיבים על האתר, בערך אחת לשבוע שבועיים. זו הסיבה שאני רוצה שהשרת יבצע זאת בעצמו.

כרגע אני חושב שאם אצמצם את הגישה לדיסק עבור קריאות מבסיס הנתונים, תיהיה לכך השפעה על הציוד שגוגל נותן לאתר. כמובן בנוסף לפעולות הטכניות של צמצום הקבצים.

תודה
Anonymous - 14/09/2015 - 16:52
נושא ההודעה:
לדעתי, אפצ'י הוא בזבזני מאוד בכמות משאבים.
בנוסף, שאני יורד ממנו ועובר ל nginx, יש כמה דברים מאוד חשובים שצריך לקחת בחשבון, וזה היכולת להגיד לו להשתמש נכון במעבד שלך.

אתה תקבל ביצועים ממש ירודים אם הוא לא מכוון נכון מול הזיכרון, אבל יותר חשוב מול המעבד. אם יש לך 16 ליבות, והוא מכוון לעבוד עם 8, הוא יעבוד רע יותר. יש איזה צוואר בקבוק בהגבלה הזו. אבל אם תגיד לו להשתמש ב16 מעבדים, אז הוא יעבוד טוב יותר ומהיר יותר.

לגבי mysql, זה תלוי בהמון גורמים. למשל איך אתה עובד, מה המשימות שאתה עושה, מה ה mode שאתה עושה, איזה סוגי נעילות, והרשימה עוד ארוכה.
Anonymous - 14/09/2015 - 19:10
נושא ההודעה:
לגומלה יש תוספים משלו שמסוגלים לעשות minify, זה כנראה עדיף מאשר להפיל את זה על apache. אם אפשר תנסה לדאוג שגומלה תעשה caching לעמודים ולא תפנה כל הזמן ל-db כדי לבנות אותם.

האם מותקן על המכונה php accelerator? מנסיוני זה נותן בוסט משמעותי בביצועים וחוסך הרבה גישות לדיסק מה שמאוד יכול לעזור במקרה שלך.
Anonymous - 14/09/2015 - 19:16
נושא ההודעה:
אני גם לא רואה שהתקנת שום מודול שעושה minify, לגוגל יש מודול שנקרא pagespeed שעושה את זה בנוסף לעוד כמה דברים:
https://developers.google.com/speed/pagespeed/module/download
COM64 - 15/09/2015 - 14:34
נושא ההודעה:
תודה רבה.
התקנתי את php-apc ואת התוסף של גוגל. אחרי מספר שעות נראה שיפור קטן.

האם כדאי להשתמש רק באחד מהם? נראה ששניהם מבצעים Chach כך שנראה לי שתתכן פגיעה בביצועים בגלל הסיבה הזו.

בנוסף, התחלתי לקרא גם עם Zend Opcache, יש לך הכרות עם הרכיב הזה?
Anonymous - 15/09/2015 - 17:32
נושא ההודעה:
Zend Opcache חדש יותר ומחליף את ה-php-apc, שניהם עושים בדיוק אותו דבר וזה להאיץ את הריצה של php על ידי caching של קבצי ה-php אחרי שהם עוברים "קומפילציה".
התוסף של גוגל עושה דברים אחרים לגמרי, למה אתה חושב שהוא מבצע caching? בכל מקרה הצעתי אותו כי חיפשת module שיעשה לך minify, אתה אמור לראות מיידית אם הוא מבצע את העבודה שלו או לא.
Anonymous - 16/09/2015 - 15:40
נושא ההודעה: כיוונון של mysql נעשה בהתאם לשימוש שבו
מבנה הטבלאות, מספר הטבלאות, היחס בין כתיבה לקריאה, כולם משפיעים על הביצועים.

ישנו תסריט perl:
http://mysqltuner.com/

שיבדוק את קבצי היומן אחרי 24 שעות פעילות ויתן לך המלצות לשיפור הביצועים.
Anonymous - 24/09/2015 - 15:29
נושא ההודעה: ...
מה סוג הטבלאות?

תעביר את הטבלאות ל-innodb ותגדיר ב-My.cnf את הערך innodb_buffer_pool לכמה שיותר גבוהה. כך תעביר את הפעילות ל-RAM.

ה-Minify הוא לא מה שיקצר לך את זמני הטעינה, במקום זאת,
תריץ
strace -s 3000 -r -o path/to/output php file.php
ותעלה לכאן את הפלט, כך נוכל לדעת ממה נובעת האיטיות/אם יש שאילתא כבדה.
COM64 - 28/09/2015 - 12:59
נושא ההודעה:
רם און: אני אבדוק את מה שהצעת על שרת ניסוי.

צב נינגה: לגבי סוג הטבלאות, זו התקנה סטנדרטית של דביאן ועליה Joomla. איך אני בודק את סוג הטבלאות?

אני לא מוצא באף קובץ את המשתנה innodb_buffer_pool. פשוט להוסיף אותו לקובץ my.cnf?

ה-Minify משפיע על הציון שגוגל נותן לעמודים, זו הסיבה שאני מעוניין לבצע את זה.
לדעתי בעיית הביצועים נובעת בעיקר מגישה איטית לדיסקים של השרת המארח ולכן אני מחפש דרכים להשתמש יותר בזיכרון.

לגבי הבדיקה האחרונה, אני מניח שאת php file.php אני צריך לכתוב? יש המלצות לשאילתות מוכנות שמבצעות בדיקות מסוימות? האם להריץ משורת הפקודה את אחד מקבצי ה-php של ג'ומלה?

תודה
כל הזמנים הם GMT + 2 שעות