מה יכול לגרום ל ConnectionException: connection timedout?

TakeCtrl

New member
מה יכול לגרום ל ConnectionException: connection timedout?

ואני לא מדבר על SocketTimeoutException
זה קורא בjava.net.PlianSocketImpl.socketConnect
והשרת עובד, (אם כי אני חושד שיש עליו עומס לא קטן של TCP, אבל אני לא יודע איך לאבחן את זה).
נסיון לעלות אפילו ל /proc/sys/net/ipv4/tcp_syn_retries ל7 , לא עזר ..
 

pattos

New member
תנסה להריץ sniffer

נניח tcpdump עם w- לקובץ לוג, ואם תראה שזה שוב מדפיס את החריגה אז תנסה להשוות זמנים ולפתוח את הdump עם wireshark ולהסתכל מה הולך שם בדיוק
 

TakeCtrl

New member
אגב, מדובר בservlet שפותח socket ל"עצמו" כלומר באותוJvm

יש serverSocket שכבר מקבל socket אחרים, חשבתי על tcpdump אבל מכיוון שכבר היה תקשורת חשבתי זה משהו יותר פרטני...
 

choo

Active member
בסיסטם, לא רק חושבים - אלא בודקים

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

TakeCtrl

New member
כשזה שרת פועל בProduction ואין לך root והדרך היחידה להתקין

root זה לעשות מספר פרוצדורות ו reboot , לא תמיד הכל אפשרי ומיידי. נכון שאני יכול לעשות sudo אבל לעיתים sudo לא נותן לי הכל.
קרוב לוודאי שזה באג, ומה שחסר לי זה כלים וכלי דיבוג (או יותר נכון ידע עליהם, כי תחום סיסטם וביצועים די חדש לי) לנתח את זה. מה בדיוק wireshark יגיד לי בקשר לזה..(באמת שואל) אגב, wireshark יצא לאחרונה גרסה 2, מלבד ממשק משתמש מחודש יש משהו אחר מעניין שם?
. היו לנו מצבים אחרים, למשל שמישהו אמר לנו לאחר שראה netstat שיש לנו המוני rejection והדרך היחידה לטפל בזה היה להעלות את רמת הbacklog בsysctl.
 

choo

Active member
בלי root - איך תריץ wireshark?

&nbsp
תוכנת wireshark דורשת הרשאות של root כדי לפתוח את התקן הרשת הרלוונטי ולהקליט ממנו הודעות.
&nbsp
ואם יש שרת production ולא מספקים לך כלים כדי לדבג אותו - יש לך בעיה פרוצדוראלית בחברה - ורצוי שתדבר עם המנהל האחראי ותחשבו כיצד לפתור אותה. אין טעם לעבוד בצורה לא יעילה בדיבוג, בגלל בעיות פרוצדוראליות.
&nbsp
נ.ב. באיזו מערכת הפעלה מדובר, שכדי לקבל הרשאות root צריך לבצע reboot? זו מערכת לינוקס שחסמתם בה את הגישה לroot באמצעות selinux או משהו דומה?
 

TakeCtrl

New member
עם tcpdump אני יכול לעבוד בעזרת sudo אני מדבר על מקרים אחרים

כגון echo 6 > /proc/sys/net/ipv4/tcp_syn_retries אז ממש הייתי צריך root , אבל בסופו של sysctl כן עבד לי. לכן אני לא בטוח בדיוק מה כן או לא יעבוד לי. יש מצב שמה שיש בsudo יספיק, רק שאני לא בטוח מה אני יכול להשתמש ומה זה יעזור (כמו שאמרתי תחום חדש בשבילי, שזה אחת הסיבות שאני אוהב לעבוד פה, לא צריך לטחון עיבוד נתונים ,hibernate, ,spring ושאר מרעין בישין).
אין לנו אפילו jdk שם כדי לבצע heap dump, רציתי להכליל אותו בהתקנות עתידיות, אבל אני לא סגור בדיוק אם הרשיון מאפשר את זה.
&nbsp
מדובר בubuntu 12 , הQA התעקשו שלא יהיה משתמש root כדי שאנשי התמיכה הטכנית לא יתפתו לעבוד איתו, איש הQA הוא זה שאמר לי שצריך להוסיף root ואז לבצע reboot בשביל זה, ייתכן שהוא צודק, אין לנו איש Linux "רשמי" בחברה.
&nbsp
 

BravoMan

Active member
לא היית צריך root "מלא" בשביל הפקודה הזו!

ב-Ubuntu, אם לא עשיתם משהו ממש מיוחד, sudo ייתן לך את כל אותן ההרשאות בדיוק שיש ל-root.

אבל, אתה צריך להבין איך ה-shell עובד, ולמי שייך ה-redirect.

כשאתה כותב:
sudo echo 6 > /proc/sys/net/ipv4/tcp_syn_retries
מבחינת ה-shell, הפקודה שיש להריץ היא sudo, הפרמטרים שלה הם echo 6, ואת הפלט של הפקודה יש להפנות לקובץ ב-proc שציינת.

עכשיו שים לב!
הפקודה שהפלט שלה מופנה אינה echo שבאמת רצה עם הרשאות root!
הפקודה היא sudo שרצה עם ההרשאות הרגילות של המשתמש שלך, ולכן אינה יכולה לכתוב לאותו הקובץ!

כדי להתגבר על זה, בכל פעם שאתה צריך להריץ פקודות עם הרשאות root שכוללות הפניית קלט \ פלט סטנדרטי, תכתוב:
sudo -s
זה יפתח shell חדש עם הרשאות root (תראה את סימן ה-#), ואז תוכל להריץ את הפקודה כאילו הרצת אותה מחשבון root ממש והיא תעבוד.
כדי לחזור ל-shell הרגיל תכתוב exit.

מקווה שזה יפתור לך כמה בעיות debug.

בהצלחה!
 

TakeCtrl

New member
sudo -s , עכשיו נזכרתי! לפני כמה שבועות השתמשתי בזה...

(הייתי צריך לעשות כל מניע התקנות מova postInstall וחלק מזה גרם לי לכתוב sudo -s ושמתי לב שיש לי #, ) , בזמן הקריאה הפנייה כל הזמן נסיתי להזכר מה עשיתי שגרם לזה לקרות.
&nbsp
אני מניח שזה זמני כי עכשיו כמובן הQA יבקשו לחסום גם את זה.. :/ הסיבה שהם יתנו שזה שאנשי התמיכה הטכנית יראו מה אני עושה ואח"כ יעשו גם כן... או זה או שהם יגידו שהלקוחות יחשוב שזה פירצה.
&nbsp
טוב מומחה גדול (או קטן) אני לא...
&nbsp
תודה, זה פותר את המגבלה של מה להריץ :), עכשיו אם זה קורה שוב, עדיין צריך לדעת מה להריץ כדי להבין למה זה קורה.
חשבתי שזה אולי קשור לCPU אבל הוא לא בעומס, הזיכרון שם היה תפוס ב64%, הCPU קופץ מדי אבל לא קבוע ב90-100%.
זה גם לא יכולה להיות בעיית תקשורת (כי ללקוח יש גם את אלו) כי בסופו של דבר זה מתחבר לעצמו. וכל שאר הsocket עובדים.
ניסיתי לשחזר את זה איכשהו במשרד, אם 2 main של client ו server/ , ולהפוך את הbacklogל 1 , אבל זה לא עזר.
 

BravoMan

Active member
מה זאת אומרת "לחסום גם את זה"?

sudo -s לא נותן יותר הרשאות מ-sudo בלי s-.

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

ואם כבר, אז יש גם Workaround:
קוד:
sudo /bin/sh
או
sudo /bin/bash
הכל יעשה את אותו הדבר בעצם.
 

choo

Active member
כמו שאמר BravoMan - בפועל - יש לך root על ידי sudo -s

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

pattos

New member
נראה לי שהוא התכוון- איזה לינוקס זה, שצריך ריבוט בשביל root

כי אין בעיה להוסיף משתמשים ולהוריד משתמשים, וroot זה פשוט המשתמש עם הuid של 0, אין בו שום דבר מיוחד (ממה שאני יודע).
 
למעלה