קטגוריה: אוגדן

מה קורה באוגדן

בעיה מוזרה של פונקצית ob_start של PHP

משום מה בשבוע האחרון האוגדן התחיל לסבול מכל מיני שיהוקים מבלי שנגעתי לו בקוד, ומאחר שלא היה לי את מי להאשים גייסתי את כל הכוחות הנפשיים והתחלתי לדבג. הבעיה הראשונית היתה שכלל לא היה פלט ובמסגרת שיטת ה"גשש ונחש*" שפותחה במשך מאות שנים על ידי מתכנתים עלומי שם הפנתי את האצבע המאשימה כלפי כלפי הקריאה ob_start('ob_gzhandler') לקימפרוס הפלט והעפתי אותה מהקוד.הפלה ופלה נראה שהכל הסתדר (ויותר מזה כי לאחר מכן האפאצ' הפסיק להתקע, דבר שהוא היה עושה פעם בשבוע).

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

מסקנות:

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

כלומר, הצורה הנכונה להשתמש בob_start היא רק על פלטים קטנים ככל האפשר, או במילים אחרות לקרוא לob_flush() בהקדם האפשרי.

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

*במקומות מסוימים בעולם ידועה כשיטת רופא האליל

סופה (הזמני ?) של החומוספירה באוגדן, האוגדן חוזר לפעולה תקינה

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

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

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

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

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

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

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

דרוש עוזר לאוגדן

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