אני מקווה לכתוב על הצדדים הטכניים של מה שהיה בדף
שינויים בצ'יק צ'ק, אבל בינתיים הסיפור האנושי:
השרת החדש לא עמד בעומס הפניות. ניסיתי לייעל את זמן התגובה על "הפניה הממוצעת" (כלומר: צפיה בדף, שזה יותר מתשעים אחוז מהפניות). קודם כל הרחבתי את השימוש במטמון לכל מה שרק אפשר, וזה באמת שיפר את זמן התגובה אבל השרת עדיין לא עמד בעומס. אז החלטתי למדוד מה לוקח הכי הרבה זמן כשעונים על "הפניה הממוצעת". הסתבר שזמן הרצת התוכנית עצמה הוא קטן ביחס לזמן הטעינה והפיענוח שלה, ועוד יותר מזה של תוכניות אחרות שהיא משתמשת בהן.
הפתרון לזה כבר ברור לי מזמן:
mod perl. אבל זה דורש יותר מדי שינויים בתוכנית, ולכן זה עדיין ברשימה. במקום זה ניסיתי לעשות כל מיני דברים אחרים שיחסכו בזמן הטעינה ויהיו יותר פשוטים למימוש; חלק עבדו די בקלות (שימוש ב-autouse למשל) ואחרים לא (קימפול התוכנית ב-perlcc).
הגעתי למצב שהתוכנית עובדת די מהר, והמדידות שלי לא מביאות את השרת לעומס יתר. אז פתחתי את השרת לצפיה בלבד כדי לראות אם זה מספיק טוב. אמרתי לעצמי שאם זה יעבוד, אפשר יהיה לראות אם ה-10% האחרים של הבקשות (שינויים,
מה חדש) גם כבדים מדי ואם צריך לשפר גם את הביצועים שלהם.
פתחתי את האתר בלילה, וככל שיכולתי לראות הוא לא נכנס לעומס.
בבוקר שוב באתי ואז הוא כבר היה עמוס מדי.
מה עושים?
נו, זה מחשב, הוא תקוע -- מה עושים?
נכון מאוד: מכבים ומדליקים.
ניסיתי.
עבד. מהר.
הלכתי לכמה שעות.
חזרתי.
שוב עמוס.
שוב כיביתי והדלקתי.
שוב עבד מהר.
אוף.
אז החלטתי לקחת את העצה של
אורנה שפרון לגבי מריבות בין ילדים: עצרתי והתבוננתי.
במלים אחרות, הפעלתי top וישבתי להסתכל ב-proccess-ים רצים.
מרתק.
מסתבר שרוב הפניות נענות ממש מהר, אבל מדי פעם יש פניה שנמשכת, ונמשכת, ונמשכת עוד, ועוד, ואז יש עוד אחת כזאת, ועכשיו כבר יש שתי פניות תקועות, (ואחרות שעדיין נענות מהר), והנה עוד אחת, ועוד, עד שכל חמשת הפניות שהשרת יכול לטפל בהן בבת אחת הן פניות שמתמשכות, ואז כל שאר הפניות מקבלות הודעת שגיאה.
כפי שאמרתי: מרתק.
אז מי הן הפניות הסוררות?
רועי התחיל לעשות נסיונות:
אולי זה
מה חדש? לא, עובד מהר.
אולי חיפוש? גם לא.
חיפוש בכל תוכן הדפים? אפילו זה לא -- לוקח טיפה יותר זכרון וזמן, אבל לא הרבה כל כך.
אולי צפיה בדף ארוך שעדיין לא שמור במטמון? גם לא.
סטטיסטיקה? כן!!!
מסתבר שהפניות הממושכות הן חישובי סטטיסטיקה. רוב החישובים האלה נערכים בשני מקרים: כשאנשים שמים בדף שלהם "דפים שכתבתי בהם לאחרונה", וכשלוחצים על הקישור {{
מידע סטטיסטי}} בראש הדף. בדקתי את שניהם, וראיתי שהראשון מהיר (לרוב) ואילו השני, הו השני, הוא מה שלוקח כל כך הרבה זמן ומשאבי עיבוד.
אז מיד הסרתי את הקישור הזה מראש הדף, כדי שלא ילחצו עליו סתם משתמשים תמימים או רובוטים עוורים. וזה עזר. עכשיו גם אם מישהו עושה חישוב סטטיסטי, זה רק אחד (או שניים או שלושה) כל פעם, ככה שעדיין יש מענה לבקשות אחרות.
ליתר בטחון הוספתי גם הוראת RLimitCPU בקובץ התצורה של השרת כדי להגביל את החישובים האלה לדקה. אם מישהו באמת יצטרך משהו יותר מזה הוא מוזמן לפנות אלי.
זהו, עכשיו נראה שהשרת עובד בסדר, אם כי עדיין צריך לראות אם הוא יעמוד בעומס כשיחזרו כל המשתמשים.