מדוע מצב Hit-Mode הוא צוואר בקבוק
תארו לעצמכם: חנות מקוונת לחומרי בניין עם קטלוג של 200,000 מוצרים. בשעות השפל, דפים נטענים תוך שנייה, אבל במהלך היום, 10% מהבקשות מואטות ל-8 שניות. הסיבה: סוכני Bitrix הפועלים ב'מצב Hit'. כל בקשת HTTP בודקת את טבלת b_agent, ואם זמן הביצוע הגיע, הסוכן רץ באופן סינכרוני, וגורם למשתמש להמתין. בעומס שיא (100+ משתמשים במקביל), זה יכול לגרום לאפקט 'האטה מדורגת': זמן התגובה גדל באופן אקספוננציאלי, ועומס השרת גדל פי 2-3. "לאחר ההעברה, מהירות האתר שלנו השתפרה פי 10" — ציין לקוח אחד.
אנחנו עוזרים להעביר סוכני 1C-Bitrix ל-cron — זה מעביר משימות רקע מבקשות HTTP לתהליך מתוזמן נפרד. התוצאה: מהירות אתר יציבה ללא קשר לתנועה וחיסכון במשאבי שרת (עד 30% הפחתת CPU, שווה ערך ל-$100–$200 לחודש על VPS טיפוסי). צרו קשר לאבחון המצב הנוכחי — נעריך את המצב תוך יום אחד.
שלוש בעיות של פעולת Hit-Mode
- חוסר יכולת חיזוי. סוכן עם תקופה של 300 שניות רץ רק כשהמבקר הבא מגיע. בלילה, עם תנועה נמוכה, הביצוע יכול להתעכב שעות. זה קריטי במיוחד עבור סנכרון 1C ומשימות התראות.
- האטות בעמוד. סוכן כבד (סנכרון 1C, שליחת מיילים) מתבצע במהלך הבקשה, ומגדיל את זמן התגובה למשתמש ספציפי. התוצאה: עד 7% אובדן המרות לכל שנייה של עיכוב.
-
מגבלת זמן.
max_execution_time(בדרך כלל 30-60 שניות) יכול להפריע לסוכן, ולהשאיר את המשימה לא שלמה. זה מוביל לשכפול נתונים ושגיאות.
יתרונות Cron: טבלת השוואה
| קריטריון | מצב Hit | דרך Cron |
|---|---|---|
| זמן ביצוע | במהלך הבקשה | רקע, מתוזמן |
| יכולת חיזוי | תלוי בתנועה | תמיד בזמן |
| השפעה על המשתמש | ישירה (האטות) | אין |
| ניהול עומס | בלתי אפשרי | מרווח זמן ונעילות ניתנים להגדרה |
| זמן מקסימלי | מוגבל על ידי PHP | ללא הגבלה (ניתן להשתמש ב-set_time_limit(0)) |
Cron יעיל עד פי 10 יותר ממצב Hit עבור סוכנים כבדים.
טעויות נפוצות בהעברה ל-Cron
| טעות | השלכות | פתרון |
|---|---|---|
| נתיב PHP שגוי | סוכנים לא רצים | השתמשו ב-which php |
| אין נעילות | ריצות מקבילות — שכפול נתונים | הוסיפו flock או IPC semaphore ל-crontab |
| התעלמות מסוכנים קריטיים | כשל בתהליכים עסקיים חשובים | בדקו כל סוכן בנפרד |
איך להעביר סוכנים ל-Cron בצורה נכונה
שלב 1. בדיקת המצב הנוכחי
בפאנל הניהול: "הגדרות → הגדרות מודול → מודול ראשי". הפרמטר "שימוש בסוכנים" — אם מוגדר ל"מצב Hit", יש צורך בהעברה. כמו כן, הריצו SQL: SELECT NAME, LAST_EXEC, NEXT_EXEC FROM b_agent WHERE ACTIVE='Y' ORDER BY LAST_EXEC DESC LIMIT 20; — אם NEXT_EXEC מפגר אחרי LAST_EXEC ביותר משעה, זה סימן עקיף לבעיה.
שלב 2. הגדרת Crontab
התחברו דרך SSH ופתחו את crontab:
crontab -e -u bitrix הוסיפו שורות:
# Агенты Битрикс — каждую минуту
* * * * * /usr/bin/php -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php > /dev/null 2>&1
# Очередь почтовых событий — каждые 5 минут
*/5 * * * * /usr/bin/php -f /home/bitrix/www/bitrix/modules/main/tools/event_exec.php > /dev/null 2>&1בדקו את נתיב PHP עם crontab -e -u bitrix . כדי להגן מפני תהליכים מקבילים, הוסיפו # Агенты Битрикс — каждую минуту * * * * * /usr/bin/php -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php > /dev/null 2>&1 # Очередь почтовых событий — каждые 5 минут */5 * * * * /usr/bin/php -f /home/bitrix/www/bitrix/modules/main/tools/event_exec.php > /dev/null 2>&1 :
* * * * * /usr/bin/flock -n /tmp/bitrix_cron.lock /usr/bin/php -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php > /dev/null 2>&1 שלב 3. החלפת מצב ב-Bitrix
לאחר הגדרת cron ובדיקה (הריצו סקריפט ידנית: which php), החליפו את האפשרות ל"דרך Cron" ושמרו. נקו את מטמון הפלטפורמה. מומלץ לבדוק על עותק staging תחילה.
שלב 4. אימות ביצוע
הריצו SQL:
SELECT NAME, LAST_EXEC, NEXT_EXEC FROM b_agent WHERE ACTIVE='Y' ORDER BY LAST_EXEC DESC LIMIT 20; flock צריך להתעדכן כל דקה. אם לא, בדקו את יומן cron של המערכת (* * * * * /usr/bin/flock -n /tmp/bitrix_cron.lock /usr/bin/php -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php > /dev/null 2>&1 ) ופלט שגיאות PHP. כמו כן, הגדירו ניטור — למשל, שליחת התראת Telegram אם סוכן לא רץ יותר מ-5 דקות.
למה Cron חוסך במשאבי שרת?
במצב Hit, כל בקשה מעמיסה על השרת על ידי קריאה ל-/usr/bin/php -f /path/to/cron_events.php. בתצורות חלשות (1-2 ליבות), זה יכול לקחת עד 200-300 אלפיות השנייה לבקשה. ב-1000 בקשות לשעה, זה 50-80 שניות נוספות של זמן CPU לשעה. Cron מסיר לחלוטין את העומס הזה, והתהליך ברקע רץ 1-2 שניות לדקה.
מקרי בוחן מהניסיון שלנו
90% הפחתה בזמן תגובה
לקוח — חנות מקוונת גדולה לחומרי בניין. תלונות על האטות "אקראיות" של עד 5-10 שניות. פרופיילינג הראה: ב-10% מהבקשות, SELECT NAME, LAST_EXEC, NEXT_EXEC FROM b_agent WHERE ACTIVE='Y' ORDER BY LAST_EXEC DESC LIMIT 20; הוסיף 3-8 שניות בגלל סוכן אינדוקס החיפוש ועיבוד תור ההתראות.
לאחר העברת כל הסוכנים ל-cron:
-
LAST_EXECנעלם מהפרופיילר. - אחוזון 99 של זמן התגובה ירד מ-8.2 ל-0.9 שניות.
- סוכני אינדוקס רצו כל דקה מבלי שמשתמשים שמו לב.
- החיסכון במשאבי שרת היה משמעותי.
סנכרון 1C לילי
לקוח — חנות מקוונת למוצרי חשמל ביתיים. סוכן הסנכרון עם תקופה של 3600 שניות רץ באופן לא סדיר; בלילה, המלאי לא התעדכן עד הבוקר. הסיבה: מצב Hit ותנועה לילית נמוכה.
העברנו את הסוכנים ל-cron עם מרווח של דקה. סוכן הסנכרון התחיל לרוץ בדיוק לפי לוח הזמנים. בנוסף, גילינו שהסוכן לפעמים חרג מ-/var/log/cron — הוספנו CAgent::CheckAgents() בתחילת הסקריפט. עכשיו המלאי מתעדכן כל 60 דקות מסביב לשעון.
מה כלול בעבודה
- אבחון מצב הסוכנים הנוכחי והשפעתו על הביצועים.
- הגדרת Crontab עם נעילות נגד ריצות מקבילות.
- החלפת מצב ב-Bitrix וניקוי מטמון.
- בדיקת כל סוכן קריטי (התראות, ייצואים, אינדוקס).
- הגדרת ניטור ביצוע עם התראות על כשל (Telegram, אימייל).
- תיעוד מפורט ומדריך תחזוקה.
- תמיכה ל-30 יום לאחר ההעברה.
- הדרכה לצוות שלך בניהול סוכנים.
לוחות זמנים ואיך להזמין
ההגדרה הבסיסית אורכת 4–8 שעות. אם יש צורך באבחון מקיף ואופטימיזציה של סוכנים איטיים — 1–3 ימי עסקים. העלות מחושבת באופן אישי לאחר ביקורת, אבל בממוצע היא מחזירה את עצמה תוך 2-3 חודשים בזכות הפחתת העומס. עם ניסיון של למעלה מ-8 שנים ב-Bitrix ו-150+ העברות מוצלחות, הצוות המוסמך שלנו מבטיח מעבר חלק.
קבלו ייעוץ: צרו קשר, ואנחנו נציע תוכנית עבודה לפרויקט שלכם. העריכו את ביצועי האתר שלכם.

