एक सिस्टम पर वर्तमान टीसीपी कनेक्शन की गिनती हो रही है


22

करने के बजाय wc -l /proc/net/tcp, वहाँ यह करने का एक तेज़ तरीका है?

मुझे बस tcp कनेक्शन की कुल गिनती की आवश्यकता है।


5
शायद कोशिश करेंss -s
उलरिच डेंगल

@UlrichDangel शांत, यह तेज़ है, सोकस्टैट पढ़ने से; आप वास्तव में उत्तर क्षेत्र में ;-)
डेज़ी

जवाबों:


20

यदि आप केवल नंबर प्राप्त करना चाहते हैं और आपको किसी भी विवरण की आवश्यकता नहीं है तो आप डेटा को पढ़ सकते हैं /proc/net/sockstat{,6}। कृपया ध्यान रखें कि कनेक्शन की पूर्ण गणना प्राप्त करने के लिए आपको दोनों मूल्यों को संयोजित करना होगा।

आप कर्नेल ही आप उपयोग कर सकते से जानकारी प्राप्त करना चाहते हैं NETLINK_INET_DIAGसे इसे पढ़ने के लिए बिना गिरी से जानकारी प्राप्त करने के/proc


1
मैं अपने समाधान के प्रदर्शन की तुलना करने वाले कई कनेक्शनों के साथ एक प्रणाली पर एक परीक्षण देखने के लिए उत्सुक होऊंगा। ऊपर सुझाए गए समाधान बनाम अंतिम उत्तर पाने के लिए अतिरिक्त अंकगणित और छानने की आवश्यकता होती है, जो कि केवल एक ही संख्या है!
जोहान

7

एक तेज़ तरीका? इस तरह से एक दूसरे के एक अंश में एक जवाब पैदा करता है, वास्तव में यह मेरे कंप्यूटर पर 0.009 सेकंड लेता है!

क्या आप एक ऐसे रास्ते की तलाश में हैं जिसके लिए कम टाइपिंग की आवश्यकता हो? उस मामले में एक उपनाम सेट करें, उदा

alias tcpcount="wc -l /proc/net/tcp"

अब आप केवल tcpcountइस नाम को प्राप्त करने के लिए अपने उदाहरण में उपयोग किए गए उपनाम को दर्ज कर सकते हैं ।

लाइन दर्ज करें या इसे अपने .bashrc में जोड़ें ताकि हर बार जब आप लॉग इन करते हैं, तो अन्य नाम परिभाषित हो जाता है।

बड़ी संख्या में कनेक्शन के लिए, निम्नलिखित संभवतः थोड़ा तेज़ चला सकते हैं (और बहुत कम संख्या में कनेक्शन के लिए थोड़ा धीमा):

#!/bin/bash
/usr/bin/tail -1 /proc/net/tcp | (IFS=:
read COUNT DISCARD
echo $COUNT
)

या हो सकता है ...

awk 'END {print NR}' /proc/net/tcp

इन दोनों समाधानों का मानना ​​है कि "डब्ल्यूसी" सिर्फ लाइनों की संख्या की गिनती के लिए बहुत इष्टतम नहीं है। मेरे परीक्षण से पता चलता है कि यह धारणा सही है।

पहले आधार पर काम करता है कि पूंछ कमांड अनावश्यक रूप से डेटा को छोड़ने के लिए वास्तव में अच्छा है, इतना है कि यह एक अतिरिक्त उप-शेल बनाने और पर्यावरण चर पर अतिरिक्त काम करने के लिए बनाता है। यह इस तथ्य का लाभ उठाता है कि लाइनों की गणना करने की आवश्यकता को समाप्त करने के लिए / proc / net / tcp में पंक्तियाँ पहले से ही क्रमांकित हैं। अंतिम समाधान यह मानता है कि एक बड़ा कार्यक्रम लोड करने के कारण किसी भी नुकसान को ऑफसेट करने के लिए पर्याप्त रूप से जागता है कई प्रक्रियाओं का निर्माण बनाम। Awk solution में अतिरिक्त लाभ है कि यह एक साधारण एक-पंक्ति की दूसरी परिभाषा में अच्छी तरह से फिट बैठता है (जो इसमें अतिरिक्त लाभ देता है, जिसे कोई स्क्रिप्ट नहीं कहा जाता है, इस प्रकार कोई अतिरिक्त शेल प्रक्रियाएँ नहीं मिलती हैं, अतिरिक्त मिलि-सेकंड लाभ देता है।)


1
मेरे पास 40k + कनेक्शन है जहां 3 सेकंड से अधिक समय लगता है
daisy

2
हम्म, मुझे नहीं लगता कि वहाँ एक बहुत तेजी से रास्ता तो से पढ़ रहा है /proc/net/tcp। आप कोशिश कर सकते हैं netstat -n -t | wc -l, लेकिन मेरा अनुमान है कि netstat से भी पढ़ा जाता है/proc/net/tcp
Kotte

netstat मेरे सिस्टम पर पढ़ने / proc / net / tcp की तुलना में 3 गुना अधिक धीमा है, लेकिन यह बहुत कम संख्या में कनेक्शन के साथ है, इसलिए यह हो सकता है कि कनेक्शन की संख्या बड़ी होने पर कुछ स्टार्टअप ओवरहेड मिट जायें। netstat अलग-अलग राज्यों में कनेक्शन की संख्या प्राप्त करना आसान बनाता है ....
जोहान

1
16 जीबी रैम वाले सर्वर पर, netstat -ntलगभग 180.000 कनेक्शन के साथ एक मिनट से अधिक समय लगता है । मुझे कोई कारण नहीं दिखता कि इसे इतना धीमा क्यों होना चाहिए ... (पढ़ना /proc/net/tcpभी बहुत धीमा है)
Marki555

1
180k कनेक्शन वाली मशीन पर कुछ शर्मीले परीक्षण यह इंगित करते हैं कि awkदृष्टिकोण की तुलना में धीमी गति से धीमी है wctailके साथ बराबर लगता है wc
फेलिक्स फ्रैंक

-1

ss -sविस्तृत उत्तर प्राप्त करने के लिए कमांड का उपयोग करें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.