מיקום קבצי תיעוד-לוג (access_log ו-error_log) ב-DirectAdmin

מיקום הבררת מחדל של קבצי לוג של apache נמצא ב-etc/httpd/logs/ 

ב-DirectAdmin, ה-access log נמצא ב:

var/log/httpd/domains/domain.com.log/

וה-error log נמצא ב:

var/log/httpd/domains/domain.com.error.log/

פורסם בקטגוריה כללי | להגיב

מדידת רוחב הפס שמנוצל ע"י השרת בזמן אמת

באחד משרתי הווידאו שאני מפעיל, ניצול רוחב הפס עומד על 40-50Mbit, בשעות העומס יש קפיצה  ל250-300Mbit, רוחב פס מאוד זול בארץ בהשוואה לחו"ל (כל Mbit עולה בין 4-8 שקל – תלוי בכמות), המחיר מאוד זול, אבל עדיין ניתן להתייעל ולחסוך בתעבורה, אז הפעלתי Traffic shaping בסרטי הווידאו בשרת, כתבתי סקריפט שמוציא את ניצול רוחב הפס כל 30 שניות, הנה הפקודה שהשתמשתי בה כדי למדוד את רוחב הפס:

vnstat -tr | grep tx  | awk '{print $3 "n" $2}' | sed 's/Mbit/s/1/g' | sed 's/kbit/s/0/g'

הערה: יש להתקין vnstat בשרת (בידקו ש-UnitMode מוגדר ל-0).

פלט לדוגמא:

1
77.15

הסבר:

  • אם רוחב הפס הוא ב-Mb, אז הספרה בשורה הראשונה היא 1.
  • אם רוחב הפס הוא ב-kb, אז הספרה בשורה הראשונה היא 0.
  • בשורה השנייה מופיע רוחב הפס בניצול (במקרה הזה, 77Mbit).

לאחר קינפוג המערכת לפי ההגדרות החדשות, לאחר שמשתמש מוריד 1500kb (בין 8-15 שניות), מהירות ההורדה מוגבלת ל-120kb לשנייה.

במשך השבוע שההגבלה פועלת, ניצול התעבורה בשעות השיא הגיע ל-150Mbit.

פורסם בקטגוריה כללי | להגיב

איך מוסיפים קוד HTML בכל עמוד בלי לערוך את קוד האתר?

אחד הלקוחות שלי ביקש ממני להוסיף קוד מעקב של גוגל אנליטיקס לאתר שלו,

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

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

יש פונקציה שמאפשרת ביצוע של קוד דינאמי/סטאטי ולהציגו ב-Header (לא רצוי), או אחרי ה-FOOTER (מומלץ), באמצעות auto_append_file.

הפונקציה הזו מבצעת require() לקובץ שאנו מגדירים.

כתבתי את קוד האנליטיקס כ-HTML והצבתי אותו בספריית הלקוח (הפונקציה מוגבלת ל-include_path), בנוסף, הגדרתי הרשאות קריאה בלבד והוספתי הגדרה ב-htaccess:

php_value auto_append_file "/path/to/file"

לאחר מכן הבנתי שתיתכן התנגשות מאחר והאתר משתמש ב-POST וב-AJAX, להחזיר תשובה לבקשות אלה עם קוד JavaScript יכול לשבור את התהליך.

אז ערכתי את הקוד והוספתי קוד PHP שקוד ה-HTML יתווסף רק במידה ומדובר בבקשת GET:

(הערה: אני יודע שוורדפרס מעוות את הקוד, ניתן להעתיק את כולו ולצפות בכתבן עד אשר יימצא פתרון לבעיה).
<?
if($_SERVER['REQUEST_METHOD'] == 'GET') {
?>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXXX-XX']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
<?
} else {
exit(); } ?>

הפתרון הזה הוא זמני, עד אשר אני אמצא פתרון יעיל יותר, שיאפשר ליישם את הפונקציה רק על בקשות GET באמצעות Htaccess (אשמח אם מישהו יגיב עם פתרון). 

אבי

פורסם בקטגוריה כללי | להגיב

מתכננים אתר חדש? כמה טיפים לאתר מהיר

מזל טוב, אתם הולכים להקים אתר חדש, בחרתם כבר בחברה לבניית האתר, כתבתם איפיון ועכשיו נשאר רק להתחיל לעבוד,

הנה כמה טיפים לבניית האתר (מומלץ להדפיס ולהגיש לבונה האתר):

  1. את כל קבצי ה-Java Script (בר"ת JS) יש לכווץ ולחבר לקובץ אחד. טעינה נוספת של קובץ JS עוצרת את רינדור העמוד ומאטה את טעינת האתר.
  2. את כל קבצי ה-Css (ר"ת של Cascading Style Sheets) יש לכווץ ולחבר לקובץ אחד. בשונה מקבצי JS, ניתן לטעון מס' קבצי CSS במקביל אבל טעינה של קובץ אחד תהיה מהירה יותר.
  3. במידה ויש לכם גולשים חוזרים (למי אין?) הגדירו Expires ו-Cache-Control נכונים ב-Headers, הדפדפן ישמור את התוכן שאינו משתנה במחשב והטעינה הבאה תהיה הרבה יותר מהירה.
  4. השתמשו ב-Css Sprites לעיצוב האתר, ניתן לחסוך זמן יקר באמצעות שיטה זו.
  5. אם האתר שלכם משתמש בעוגיות (Cookies), הגדירו סאב דומיין נוסף ותטענו משם את כל התוכן הסטטי (תמונות, CSS וכו'), בכל בקשה של קובץ מדומיין עם Cookies הדפדפן שולח את Cookie לכל אובייקט (לתמונות, CSS וכו'), ניתן לחסוך המון תעבורה (מצד הגולש ומצד השרת) עם שימוש נכון בסאב דומיין.
  6. אם העמוד מתוכנן להיות ארוך ומלא באלמנטים, השתמשו ב-Lazy Loading – מדובר בסקריפט הכתוב ב-JS שמורה לדפדפן להוריד רק את התוכן שהמשתמש צופה בו, ניתן לראות את זה בפעולה באלבומים בפייסבוק.
  7. תכננו את האתר כך שלא ידרוש יותר מ-8 בקשות לעמוד: בקשה אחת לעמוד, בקשה אחת לקובץ JS, בקשה אחת לקובץ CSS ועוד 5 בקשות נוספות לבחירתכם.
  8. תדחסו את התמונות שאתם משתמשים בהם, אם אתם משתמשים בתמונה בגודל 100X200, אל תשתמשו בתמונה גדולה יותר. 
אבי.

לעוד חומרים בנושא האצת אתרים

פורסם בקטגוריה האצת אתרים, כללי | להגיב

אתרי החדשות בארץ – כמה מהירים הם?

הם לא, הם פשוט לא מהירים, הם איטיים להחריד.

באמצעות WebPageTest.org ערכתי מספר בדיקות מהירות (בדיקה המדמה גולש שמשתמש ב-IE8 בישראל עם חיבור 5/1 עם זכרון מטמון נקי), הנה סרטון המציג את הליך הטעינה בהילוך איטי:

והנה חלק מהמסקנות:

  • כל אתרי החדשות הגדולים משתמשים ב-CDN, זה פותר המון בעיות עומס (חס וחלילה וקורה פיגוע, יש עלייה מטורפת של תעבורה באתר), הם מקבלים מחיר זול מאוד (וחברות ה-CDN נהנות "ממוניטין" בתמורה) ושני הצדדים יוצאים מרוצים, אין בעיות עם ה-BackEnd.
  • Nrg הוא אתר "איטי-מהיר", הדפדפן מתחיל לרנדר את העמוד רק אחרי 6.6 שניות (וזה בגלל קובץ JS שתקוע איי שם בשורה 1306 בקוד),  והוא הראשון לסיים טעינה מלאה תוך 13.9 שניות. לשאר האתרים לוקח עוד 2 שניות נוספות.
  • כל התוכן באתרים נטען בממוצע תוך 6.8 שניות, ייקח עוד 6.8 שניות בממוצע עד לטעינת כל הפרסומות ולשליחת סטטיסטיקות של הדפדפן לחברות ניטור.
  • אף אחד מהם לא משתמש ב-Lazy Loading.
  • אפשר וניתן לשפר את זמן הטעינה של כל האתרים בצורה ניכרת.

בכל האתרים האלו, יש המון השקעה ב-BackEnd (שרתי Web, שרתי Cache, Load Balance ועוד), אבל אין שום תכנון לשימוש יעיל ב-FrontEnd, אפשר להשוות את זה לנסיעה עם Ferrari במגרש חצץ.

אז איך אפשר לשפר את ה-FrontEnd?

ישנם המון תהליכים שאפשר לעשות כדי לשפר ביצועי טעינה ב-FrontEnd, ככל שהאתר גדול ומכיל יותר תוכן, כך יש יותר "עבודות שיפוץ", אתן דוגמא ל-3 תהליכים שישפרו את טעינת האתר (במקרה הזה, ב-Ynet):

  • שימוש ב-Cache-Control וב-Expires לעתיד הרחוק, מרכיבי העיצוב הינם קבועים (כמו הלוגו למשל), ולכן אין טעם להוריד את הלוגו שוב ושוב ושוב.
  • שימוש ב-Image Map: התמונה המצורפת (המדורים באתר) מורכבת מ-17 תמונות שונות:שימוש ב-Image Map מאפשר להשתמש בתמונה אחת (תמונה מחוברת של 17 התמונות) ובאמצעות קורדינטות בקוד ה-HTML להגדיר קישור שונה לכל חלק מהתמונה. שימוש בטכניקה זו יחסוך הורדה של 16 תמונות, אם ה-TTFB (הזמן מרגע בקשת הקובץ עד שהשרת שולח את הבייט הראשון) האופטימלי עומד על 0.05 שנייה, אנחנו חוסכים לפחות 0.8 שניה בטעינת האתר.
  • שימוש ב-Css Sprites,  ניקח את התאריך באתר שמשתנה מיום ליום:

Css Sprites מאפשר לנו להשתמש בתמונה שמכילה המון אלמנטים, ובאמצעות קורדינטות להציג חלק מהתמונה שאנו מעוניינים להציג במקומות שונים, בגלל שבשונה מהמדורים ב-Ynet שלא משתנים, התאריך משתנה מיום ליום, והוא מורכב מ-3 תמונות שונות (יום, חודש, שנה), קובץ התמונה והחודש מורכב מ-31 קבצים (מ-01.jpg עד 31.jpg), הקובץ מכיל את המספר ונקודה (01.jpg יכיל את הספרה 1 ונקודה), וקובץ השנה (מ-00.jpg עד-015.jpg) מורכב מצירוף מהספרות בלבד).סה"כ יש 47 קבצים שונים בתיקיה, הקובץ הקל ביותר הוא 1.gif ששוקל 264 ביט, הקובץ הכבד ביותר הוא 013.jpg והוא שוקל 1188 ביט. (כל התיקייה שוקלת 192K).

אם ניקח את הספרות 0-9 ואת הנקודה ונחבר אותם לקובץ אחד, נקבל קובץ ששוקל 6776 ביט (ניתן להקטין את המשקל עוד יותר עם דחיסה/פורמט שונה):

עם הטמעה נכונה כולל הגדרות מטמון(מגדירים לדפדפן שמור את הקובץ במחשב לשנה קדימה), אנחנו חוסכים 2 בקשות לגולש עם זכרון מטמון נקי ולאחר מכן הדפדפן לא יבקש את הקובץ מהשרת אלא יטען אותו מהמחשב. בשימוש כזה אנו חוסכים 0.15 שניה בממוצע.

מעבר לחיסכון בתעבורה וטעינה מהירה יותר של האתר, שימוש ב-Css Sprites ו-Image Map חוסכים המון משאבים לשרת ה-Web.

לעוד חומרים בנושא האצת אתרים

פורסם בקטגוריה האצת אתרים, כללי | 6 תגובות

שיפור ביצועי שרת ו-Nginx באמצעות gzip_static

באחד השרתים שלי מותקן Nginx להפחתת עומסים לאתרים כבדים, את כל קבצי ה-JS, CSS והתמונות (עד  משקל של 55kb)  אני מארח דרך השרת הזה.

השרת מאחורי FW, עם 64Gb זכרון ראם, כל התוכן יושב על RamDisk.

אצל חלק מהלקוחות לא כל המערכות מוגדרות לייעילות מרבית, אצלי כבררת מחדל:

  • קובץ CSS/JS שאינו דחוס (מכיל רווחים, הערות וכו') עובר דחיסה אוטומטית.
  • יש  דחיסת Gzip לכל קבצי txt. .js .css ב-HTTP/1.1 (דפדפנים תומכים).
  • דפדפנים ישנים המשתמשים שלא תומכים ב-Gzip מקבלים את התוכן ללא Gzip.
  • Expire header מוגדר כהלכה.
  • KeepAlive פועל.
  • ה-TTFB נמוך מאוד.

בנוסף, שימוש ב-IP של השרת מאשר בכתובת האתר מאפשר טעינה מהירה יותר מאחר והדפדפן פותח עוד 2-8 חיבורים והאייפי הוא "חסר עוגיה".

ערכתי מס' בדיקות ומצאתי שאפשר לחסוך זמן מעבד ולשפר את ה-TTFB עוד יותר (ב-HTTP/1.1), באמצעות פונקצית gzip_static ב-nginx.

הפונקציה הזו מאפשרת לך ליצור מראש שני קבצים:

  • file.txt – קובץ המקור, ללא דחיסה.
  • file.txt.gz – הקובץ לאחר הדחיסה.
הערה: חותמת הזמן (timestamp) של שני הקבצים חייבים להיות תואמים.

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

מספר טיפים:

1. שימוש ב-gzip_static ללא קבצי gz הוא בזבזני, מאחר וכל בקשת קובץ Nginx מחפש את קובץ ה-gz, ורק במידה והוא לא קיים הוא ממשיך לקובץ המקור, ניתן לחסוך המון I/O בביטול האפשרות הזאת.

2. במידה ואתם מציגים גם תמונות (שאותם לא דוחסים) וגם קבצי טקסט, יש לבטל את gzip_static עבור התמונות:

location ~* ^.+.(jpg|png|bmp|jpeg|tif)$ {
# Rest of configuration
gzip_static off;

}

3. במידה ו-Nginx משרת המון קבצים שונים, נפעיל את האפשרות רק עבור קבצי טקסט:

location ~* ^.+.(js|css|txt)$ {
# Rest of configuration
gzip_static on;
}

אבי קינן.

פורסם בקטגוריה כללי | להגיב

האינטרנט בעבודה זוחל?

ברשת אינטרנט ארגונית, יש המון תעבורה כפולה ומיותרת, כדי ליעל את השימוש ברשת, ניתן לסנן המון תעבורה מיותרת (לדוגמא: פרסומות) ולשפר את מהירות טעינת האתרים הפופולרים.

נעשה זאת ע"י 2 הפעולות הבאות:

1. נערוך את ערכי ה-DNS ונציב 0.0.0.0 בכתובות לא נחוצות (כמו פרסומות) – ניתן לבצע זאת בשרת ה-DNS במקום העבודה, או בקובץ ה-HOSTS בכל המחשבים בעבודה.

2. נתקין שרת Proxy (לדוגמא: Squid) ברשת הפנימית ונגדיר CACHE לתוכן סטטי (קבצי JS, CSS, תמונות), בנוסף, נוסיף Expires header ל-30 יום לכל התוכן מהסוג הזה.

קצת מספרים: 

1. ב-Ynet יש 21 קבצי JS (זה המון!) בעמוד הראשי, המשקל שלהם עומד על קצת יותר מ-450Kb.

2. יישום פעולה מס' 1 על 80% מהפרסומות ב-Ynet, יגרום לטעינה מהירה יותר ב-5 שניות לפחות לדף הבית של Ynet.

פורסם בקטגוריה כללי | להגיב

כונן SSD חזר מ-RMA

קיבלתי לפני כ-3 ימים כונן SSD מ-KSP במקום הקודם שמת. (אני רוצה להודות לאלכס מ-KSP על השירות שלהם).

הנה האריזה פתוחה:

Gif.co.il - העלאת תמונות -

פתיחת הקרטון:

Gif.co.il - העלאת תמונות -
לאחר פתיחת האריזה ופריקת הקרטון:

Gif.co.il - העלאת תמונות -כככ

מה באריזה:

1. קרטון מהודר.

2. מדריך למשתמש.

3. פלטה המאפשרת חיבור כונן ה-SSD 2.5" לחיבור 3.5".

4. הכונן באיזה אנטי סטטית.

5. ברגים.

הכונן החדש:

 

Gif.co.il - העלאת תמונות -

כדי להראות כמה שהכונן קטן, הנחתי את הכונן על דיסק.

Gif.co.il - העלאת תמונות -

הרכבתי הכל והנה:

Gif.co.il - העלאת תמונות -

מצד ימין, LG X120 השני שלי שהשתמשתי בו בזמן ה-RMA.

מצד שמאל, המחשב מורכב עם הכונן החדש במהלך התקנה של WINDOWS 7.

 

סוף סיפור.

 

פורסם בקטגוריה כללי | להגיב

גם זה קורה – כונן קשיח SSD מת

לפני 4 חודשים החלטתי לשדרג את המחשב הנייד שלי(LG x120).

הזמנתי מ-eBay זכרון ראם של Kingston בנפח 2Gb. (חמצן למערכת הפעלה) ומ-KSP קניתי כונן G.Skill Phoenix, שנראה כך. (שיפור עצום בזמני ה-I/O).

החלפתי בין הכונן (160Gb 5400RPM), לבין ה-SSD החדש, התקנתי Windows 7 במקום XP והשיפור היה מאוד מורגש, המחשב מריץ יישומים הרבה יותר מהר, פחות מתחמם והסוללה מחזיקה קצת יותר זמן (בגלל שצריכת החשמל של כונני ה-SSD נמוכה יותר).

אתמול בזמן עבודה המסך החשיך לפתע, ניסיתי להפעיל את המחשב מחדש ונתקלתי במסך ביוס מעצבן שלא זז (פה, התחלתי לחשוש). בדיקה זריזה הראתה שהנייד לא מזהה את ה-SSD (לא צפוי).

פתחתי את המחשב היום וחיברתי את הכונן למחשב נייח כדי לוודא שלא מדובר בתקלה בלוח האם,

איך מפרקים (מי שלא התנסה בזה בעבר – לא לנסות את זה בבית – באחריותכם בלבד):

1. מוציאים את כל הברגים (כולל Memory ו-KeyBoard) – סה"כ 11 ברגים.

 Gif.co.il - העלאת תמונות -
2. בשלב זה אנחנו רואים את הלוח אם של המחשב ורואים גם את הכונן הקשיח, הכונן מוברג לתושבת של לוח האם ע"י 2 ברגים שנמצאים מתחת למקלדת.

Gif.co.il - העלאת תמונות -

3. מוציאים את המקלדת, ומוציאים את 2 הברגים.

Gif.co.il - העלאת תמונות -

4. אפשר להוציא את הכונן ע"י הרמה קלה(בעדינות), של הכונן מצד ימין ומשיכה כלפי חוץ – כפי שמסומן באדום בתמונה.

Gif.co.il - העלאת תמונות -

והכונן בחוץ.

 

בשלב הבא חיברתי את הכונן למחשב בבית, ווידאתי שהכונן באמת תקול.

Gif.co.il - העלאת תמונות -

והוא אכן מת, כרגע נמצא ב-RMA אצל KSP, ויש גיבוי לכל החומר.

 

אחרי כל מסכת הפירוקים הזו, אפשר להתנחם בחבילה שקיבלתי מ-eBay הבוקר,

Gif.co.il - העלאת תמונות -

כיסוי של Angry Birds למחשב.

פורסם בקטגוריה כללי | עם התגים , , | תגובה אחת

המלצה: תוכנת עזר מעולה לחיפוש בתוך קבצים

החיפוש המובנה של Windows XP לא כל כך מוצלח בחיפוש בתוך קובץ (לדוגמא, לחפש קוד מסויים בתוך סקריפט). ב-Windows 7 החיפוש נעשה עוד יותר גרוע למרות שלחיפוש יש אינדקס.

אני משתמש ב-Seeker, תוכנה מעולה לחיפוש והיא חינמית, ניתן להוריד אותה כאן.

אלו שמעוניינים לקרוא עוד לגביה, הנה קישור לדף התוכנה.

שבוע טוב,

אבי.

פורסם בקטגוריה כללי | להגיב