@clickone אמר בבדיקת עומס על שרת:
אגב הפקודה אמורה להסתיים בסוף?
אני לא רואה שזה חוזר לשורת הפקודה, רק אם עשיתי לאחר הפלט האחרון קונטרול C הוא הסתיים.
זה תקין?
@clickone אמר בבדיקת עומס על שרת:
אגב הפקודה אמורה להסתיים בסוף?
אני לא רואה שזה חוזר לשורת הפקודה, רק אם עשיתי לאחר הפלט האחרון קונטרול C הוא הסתיים.
זה תקין?
@clickone אמר בבדיקת עומס על שרת:
@חוקר
תדביק כאן את הפקודה (אתה יכול שלנות את הURL)
ab -k -c 1000 -n 4000 http://123.123.123.123:3030/campaign_status?ApiPhone=0501234567&go_to_folder=3&campaign_id=00000&menu=1
@clickone אמר בבדיקת עומס על שרת:
@magicode לכאורה לפי פלט הבדיקה שלו, נראה ש @חוקר השתמש עם
ab -k -c 1000 -n 4000 example.com/ובגלל הפרמטר C שהוגבל לאלף הוא לא עבר אותו
אכן, כי המקסימום היוצא הוא כנראה 1024 לפי הבדיקה ב
ulimit -n
@magicode אמר בבדיקת עומס על שרת:
תתקין את pm2 ב SYSTEM
pm2 startup
תעשה
systemd restart pm2ואז תהיה בטוח שהוא לא מוגבל.
לגבי השרת הבודק. תריץ את זה לפני הבדיקה.
ulimit -n 40000
לא הבנתי על איזה שרת להתקין את הPM2?
בנבדק זה כבר קיים, צריך להתקין אותו מחדש במיקום שונה?
או בבודק שזה בעצם ספם שורת פקודה של לינוקס
@clickone אמר בבדיקת עומס על שרת:
@חוקר כתבת שהרצת 4000 בו זמנית
שאלתי מה קיבלת על ה3000 בקשות?
הם נפלו?
או קיבלת עליהם תשובה מאוחרת?
לפי איך שהבנתי את הדוח נראה שכולם בוצעו.
העתקתי למעלה את הפלט, אם מישהו ידע לקרוא יותר טוב ממה שניסיתי להבין, אשמח להסבר
@magicode אמר בבדיקת עומס על שרת:
תריץ את השרת עם PM2
תראה שהוא יצליח יותר בגלל שהוא פותח את מגבלות הלינוקס.תראה
ulimit -n
השרת הבודק או הנבדק?
הנבדק הוא nodejs שמופעל על ידי pm2
@חוקר אמר בבדיקת עומס על שרת:
@magicode אמר בבדיקת עומס על שרת:
https://stackoverflow.com/questions/12732182/ab-load-testing
איך אני יכול לדעת מהו המקסימום חיבורים האפשריים בשרת היוצא?
הצלחתי מקסימום אלף
@magicode
אשמח לדעת מה זה אומר, כשניסיתי 4000 בקשות ע"י 1000 חיבורים בו זמנית.
זה הדוח
Concurrency Level: 1000
Time taken for tests: 4.578 seconds
Complete requests: 4000
Failed requests: 0
Keep-Alive requests: 0
Total transferred: 1020000 bytes
HTML transferred: 468000 bytes
Requests per second: 873.84 [#/sec] (mean)
Time per request: 1144.380 [ms] (mean)
Time per request: 1.144 [ms] (mean, across all concurrent requests)
Transfer rate: 217.61 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 3 3.9 1 16
Processing: 7 140 689.2 21 4557
Waiting: 7 140 689.3 21 4557
Total: 9 143 690.2 23 4563
Percentage of the requests served within a certain time (ms)
50% 23
66% 26
75% 28
80% 33
90% 84
95% 248
98% 4555
99% 4560
100% 4563 (longest request)
הCPU בשרת מראה כך

@magicode אמר בבדיקת עומס על שרת:
https://stackoverflow.com/questions/12732182/ab-load-testing
איך אני יכול לדעת מהו המקסימום חיבורים האפשריים בשרת היוצא?
איך אני יכול לנסות להריץ על השרת 1500/2000 בקשות בו זמנית, לראות את העמידות של השרת?
למישהו יש מידע?
תודה. הרגעתם אותי
בJS כידוע כל הקובץ רץ בבת אחת, ולא כ"כ לפי שורה שורה, אלא יותר מבחינת זמן הריצה של ביצוע השורה.
איך ניתן לסדר מראש שהסדר במשתנים בטוח לא ישתנה.
נשתמש בדוגמה בסיסית.
var a = 2;
var b = a * 4; //8
var c = 5; //5
var d = b + c; //13
אני רוצה לקבל במשתנה d תוצאה 13 שמורכב מ b שהוא בעצם הכפלה של a תהליך שלוקח זמן יותר מלאכלס את משתנה c שהוא השמה בלבד ללא חישוב.
באמת התוצאה בקונסולה היא ש d = 13
אבל אני חושש מליצור תהליכים שבנויים אחד אחרי השני בקטע של משתנים, כשיש איזה חישוב במשתנים שייתכן שאחד יאוכלס לפני הקודם אליו או משהו כזה.
האם אני צודק בחששות שלי, וא"כ האם יש פתרון?
מספר שאלות מתקדמות בnodjs
א. היות וצורת העבודה שלי היא לא משהו קבוע, אלא כל הזמן עלי להוסיף פעולות וכתובות חדשות, שנקרא להם מערכות, וכן לתקן ולשנות מערכות קודמות.
מהי צורת העבודה הנכונה והנוחה?
לעשות לכל מערכת קוד נפרד, שיאזין לפורט נפרד, ואז יש לי את הגמישות שאני יכול לשנות מערכת מבלי לגעת במערכות פעילות אחרות, והקודים הרבה יותר מסודרים, אך אני מריץ לכל דבר תהליך נוד נפרד, דבר שלכאורה יקח יותר משאבים, ומצד שני אם זה היה הכל תחת תהליך אחד, אם תיהיה שגיאה בעדכון החדש זה יכול להפריע למערכות הפעילות, וכן הקוד ארוך ומפותל, אך אולי תהליך אחד גדול מבזבז פחות משאבים מכמה תהליכים קטנים.
ב. לגבי עצם העדכון, אני משתמש בPM2, לעשות restart לתהליך היא הדרך הכי נכונה לאחר ביצוע שינוי בקובץ?
ג. עד כמה כדאי להעמיס במשתנים בדף אחד?
הנקודה היא כך, לפי איך שהתחלתי להבין יותר לעומק איך שנוד בנוי בתהליך שרץ כל הזמן, זה יכול לתת לי מענה למה שהייתי תקוע עד עכשיו בPHP שלא הייתי יכול להשתמש במשתנה אחד משלב לשלב, אלא כל פעם הכל נטען ומסתיים מחדש, כעת אני יכול בעצם ליצור מערך של שיחות (אני מקבל בGET מזהה שיחה יחודי), ואז לאכסן בצד השרת בתהליך של הנוד כל מיני משתנים שרלוונטים לשיחה הנוכחית, ומקסימום אני יכול לעשות שכאשר שיחה מסתיימת אני אמור לקבל בGET פרמטר hangup=yes, ואז אני מוחק את זה מהמערך של השיחות הפעילות, ובעצם המערך הזה אמור להתנפח ולהתקטן לפי כמות השיחות הקיימות כעת במערכת.
האם זה מומלץ, או יכול ליצור בעיות?
ד. בהמשך לשרשור הקודם שלי, בניתי בצורה שהנתונים מתעדכנים כל 2 שניות, לא תמיד יש צורך בזה, יש שעות שאף אחד לא מחובר וכו' וחבל על המשאבים.
האם כדאי לבנות בצורה של מערך שמכיל ג"כ נתון של זמן עדכון אחרון, ואז אני מבצע בדיקה באם העדכון היה לפני למעלה מ2 שניות זה יעדכן תוך כדי הבקשה של הלקוח, והמאזינים הבאים במשך 2 השניות הקרובות יקבלו את המידע השמור, ואח"כ זה שוב יעדכן תוך כדי בקשה וחוזר חלילה.
אני מרוויח שאין בדיקה סתם כשלא צריך, ומצד שני א. המאזין הנוכחי שאצלו זה מתעדכן ימתין חצי שניה יותר.. ב. מה יקרה בבקשות ביניים, זאת אומרת מאזין א מתקשר, השרת רואה שזה לא מעודכן, ומפעיל את פונקציית העדכון, אך בינתיים ב 165 מ"ש שלוקח לעדכן, מתקשר מאזין ב ואז השרת רואה שעדיין לא עודכן המערך. זה יפעיל שוב את פונקציית העדכון? ונמצא שעודכן פעמיים בזה אח"ז? א"כ אני מפסיד הרבה מאוד ממה שאני רוצה להרוויח כמה שפחות פעולות עדכון.
@david @magicode @אהרן @יוסף-בן-שמעון @clickone
תודה רבה לכל אלו שעזרו וסייעו
@david @יוסף-בן-שמעון @אהרן @magicode @clickone
מקוה שלא פיספסתי מישהו.
ב"ה הייתה התקדמות משמעותית היום, השלמתי בניית מערכת שעובדת בצורה חלקה, כמובן בעזרתכם.
עדיין לא גמרתי, אני לא למדתי עדיין מספיק את השפה, אבל כבר היה מספיק בסיסי כדי לעשות משהו שזז באמת..
במיוחד תודה ל @magicode על הדוגמה הראשונה שנתן, זה נתן לי פריצת דרך רצינית, וכן לימדה אותי פרק נוסף בנושא.
וכן ל @david שדחף אותי להיכנס לזה..
תודה
נ.ב. אני מקוה שסיימתי לאשכול זה, הנושא הבא כבר יהיה באשכול חדש..
@אהרן @יוסף-בן-שמעון
בעצם הכי פשוט להכניס הכל ב IF הקודם.
כך:
if (!campaign_id || campaign_id === ''){
res.end("id_list_message=" + 't-לא הוגדר מספר קמפיין, לא ניתן לבצע פעולה זו.' + '&' + "go_to_folder=/" + 'hangup');
}else if (!campaigns_data[campaign_id]){
res.end("id_list_message=" + 't-קמפיין לא מורשה במערכת, לא ניתן לבצע פעולה זו.' + '&' + "go_to_folder=/" + 'hangup');
} else{
campaign_stats = campaigns_data[campaign_id];
var total = campaign_stats.data.total;
...
}
@חוקר אמר בשאלות של מתחיל - מקצועי ב nodejs:
כאשר אין מספר קמפיין, או מספר הקמפיין אינו מופיע במערך של הקמפיינים הפעילים, אני מקבל בלוג
ReferenceError: campaign_stats is not defined
מה שמעניין שאני קיבלתי את זה פעם אחת בלוג על כשאין מזהה ופעם נוספת כשהקמפיין אינו במערך, ולא יותר.
וזה לא נוסף ללוג בכל בקשה מחדש, רק פעם אחת לכל תרחיש.
@יוסף-בן-שמעון אמר בשאלות של מתחיל - מקצועי ב nodejs:
אולי תפתח אשכול חדש לכל נושא, זה מכביד 3 עמודים לנושא אחד...
כעת יש לי עוד 17 הודעות עד לדף הבא, ואח"כ נעבור נושא.
או שעד אז הכל כבר יהיה מסודר בעזה"י..
@יוסף-בן-שמעון אמר בשאלות של מתחיל - מקצועי ב nodejs:
@חוקר זה לא קשור לאיך נוד קורא את הדף, זה פשוט משתנה שמעולם לא אותחל אז הוא undefind, אתה יכול לכתוב כך:
var total = (campaign_stats && campaign_stats.data.total);זה יבדוק אם המשתנה קיים ואם לא הוא יחזיר מיד את הundifind ולא יכשיל את הפונקציה
הפונקציה בכל מקרה רצה ולא נכשלה, אבל אני רוצה ללמוד לכתוב תקין בכל מקרה.
לפחות אם אתם מלמדים אותי בכזה מסירות שיצאו פירות מעמלכם..
@חוקר אמר בשאלות של מתחיל - מקצועי ב nodejs:
מה היא הדרך הנוחה ביותר לסדר קוד כעין זה שיהיה תקין?
אולי הכי קל לעבוד עם IF ו ELSE?
או כן להתרגל לעבוד עם משהו שהוזכר לעיל בנוגע לעבודה אסינכרונית?