לוג כמה משאבים הפקודה צורכת
-
אני מנסה למצוא דרך לחלוקת עומסים בשרתי IVR
אני לא יכנס כאן לכל הסיפור
אבל אני מצאתי דרך להשמיע קובץ מתוך סקריפט
אבל אני לא יודע מה קורה מאחורי הקלעים? כמה זיכרון הוא צרך לאורך התהליך? כמה רוחב פס הוא תפס?אתם לא צריכים להבין איך עובד הקטע של הIVR,בשביל להבין את הבעיה
זה הפקודהcurl http://51.15.47.193/test/588.wav | sox -t wav - $@ -t raw - trim 60 5
הפקודה הנ"ל מורידה קובץ שמע עם CURL (הקובץ הספציפי הזה שוקל כ90 מגה).
ומזרימה את התוכן לתוך SOX.
SOX מזרים את המדיה בצורה גולמית לפלט (אם תפעילו את הפקודה, המסך שלכם יתמלא גיבריש).
בסוף הפקודה הוספתי את הדגלtrim 60 5
שזה משמיע את הקובץ משניה 60 ואילך, למשך 5 שניות.עכשיו אני רוצה לדעת מה קורה מאחורי הקלעים?
האם זה מוריד את כל הקובץ? כמה זיכרון ? כמה רוחב פס זה תופס? האם הצריכה משתנה לאורך התהליך?
למשל יכול להיות שהוא טוען הכל בזיכרון, ואז SOX מטפל בזה כרצונו?
יכול להיות שהוא מוריד רק את הקטע המבוקש ולא טוען שום דבר לזיכרון?בקיצור האם יש דרך לראות מה קורה כאן?
(יהיה טוב אם יש דרך לבדוק מה קורה כשתוכנה נוספת (IVR) מפעילה את הפקודה, ולא מתוך הטרמינל
כי יתכן שאז יש התנהגות שונה) -
too broad.
במקרה של הסקריפט שלך יש שרשור פלט מפקודה לפקודה. לפקודה אין אפשרות לציין לפקודה שלפניה שהיא לא צריכה את ההתחלה.במקרה של trim הפוך (קיצוץ בסוף), היא כן יכולה להפסיק אותה כשהיא לא צריכה (אם היא בכלל יכולה להפסיק, לא בכל פורמט אפשר להפסיק בלי לעבד את כלל הפלט), האם זה יחסוך במשאבים? תלוי בטיב ובאופי הפקודה המופסקת (במקרה של curl למשל זה אכן יחסוך).
מה עם הזיכרון? גם זה תלוי בתהליך. כל הרעיון של השרשור פקודות זה חיסכון זיכרון אבל זה בכלל לא תמיד רלוונטי. למשל עם רוצים לדחוס אפשר לשרשר מקלט לדחיסה בלי לקחת שום מקום בזיכרון מעבר לbuffer שזה כמות שאיננה תלויה בגודל הקלט (גם מאה גיגה יתפסו אותו זיכרון). אבל אם השרשור למשל הוא ממקור שמחייב קריאת כל הקלט (למשל הרצה של סקריפט ארוך וכדומה, או עבודה על פורמט אחר שמחייב קריאה של כל המידע), או להיפך הפקודה המקבלת צריכה את כל הקלט או עושה איתו כל פעולה בזבזנית אחרת, הזיכרון יהיה בהחלט תלוי בגודל הקלט.
בכותרת שאלת על לוג משאבים, אז המנהל משימות הוא המקום לבדוק זאת.
-
@dovid אמר בלוג כמה משאבים הפקודה צורכת:
בכותרת שאלת על לוג משאבים, אז המנהל משימות הוא המקום לבדוק זאת.
א. אני רוצה משהו שיראה כמו לוג (בסגנון dstat).
ב. אני לא מצליח לבודד את התהליך באופן מסודר בתוך המנהל משימות, ולראות מה קורה עם התהליך הספיציפי הזה. -
@nigun
התשובה לשאלות שלך תלוי בהמון משתנים. חלק מה דוד כבר ציין.אתה צריך להבין מה קורה כאשר אתה מריץ pipeline ב-shell. (כלומר פקודה עם
|
)
ה-shell דבר ראשון מייצר pipe, ואז מריץ במקביל את שתי התהליכים כאשר הפלט של הראשון מחובר לצד אחד של ה-pipe והקלט של השני מחובר לצד השני של ה-pipe.
כמו שדוד כבר העיר, התהליך הראשון אין לו מושג מי נמצא בצד השני של ה-pipe ומה הצרכים שלו (וכן להיפך).השאלה שלך איזה משאבים ה-pipeline יתפוס תלוי בכמה משתנים:
נניח לצורך הענין שהתהליך השני רוצה רק חלק מהקובץ (כמובן שזה לא נכון בכל מקרה, וכמו שדוד כבר העיר זה תלוי בפורמט של הקובץ וסוג הפעולה שאתה עושה איתו), ובנוסף נניח שהתהליך מתנהג בחסכנות ומפסיק לקרוא מתוך ה-pipe כאשר יש לו את החלק שהוא צריך.
עוד הקדמה: כאשר צד אחד מה-pipe מפסיק למשוך ממנו מידע, הצד האחר לא יכול לדחוף לשם עוד מידע.
יוצא שיש 3 מצבים אפשריים בהרצה זו, במצב הראשון התהליך השני צורך מידע מה-pipe והתהליך הראשון ממציא לו מידע. הכל זורם.
במצב השני התהליך השני כבר קיבל את כל המידע שהוא צריך והוא מפסיק לשלוף מתוך הצינור. אבל התהליך עדיין קיים וממילא נסיון כתיבה לצינור לא מחזירה שגיאה, אלא ה-thread של הכתיבה יהיה במצב blocked.
במצב השלישי התהליך השני סיים את תפקידו בעולם ונפטר לעולם שכולו טוב. בשלב הזה נסיון כתיבה לצינור מחזיר שגיאה. וגם זורק signal של SIGPIPE.עכשיו צריך לברר:
- איך curl מתנהג כאשר הוא לא יכול לכתוב לצינור שמחובר לפלט שלו. האם הוא ממשיך להוריד את הקובץ?
- איך curl מתנהג כאשר נסגר הצד השני של ה-pipe, ויש שגיאת כתיבה, או שהוא קיבל signal SIGPIPE האם הוא ממשיך להוריד את הקובץ?
@nigun אמר בלוג כמה משאבים הפקודה צורכת:
(יהיה טוב אם יש דרך לבדוק מה קורה כשתוכנה נוספת (IVR) מפעילה את הפקודה, ולא מתוך הטרמינל
כי יתכן שאז יש התנהגות שונה)לא אמור להיות שום הבדל. בכל מקרה ה-shell מריצה את הפקודה. (כי pipeline זה מבנה של ה-shell ולא של מערכת ההפעלה, אין דרך להריץ את זה ישירות)
-
@yossiz
אני לא יודע האם זה עוזר
CURL מחזיר את הפלט הזה% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 6 14.5M 6 940k 0 0 380k 0 0:00:39 0:00:02 0:00:37 380k K+6�+�����{[��s������A������+�,���G .....עוד הרבה גיברש 1 88.8M 1 969k 0 0 356k 0 0:04:15 0:00:02 0:04:13 356k curl: (23) Failed writing body (556 != 1388)