2011-12-27 9 views
26

लिनक्स कर्नेल (कर्नेल पता स्थान में) प्रति टीसीपी/आईपी नेटवर्क कनेक्शन द्वारा औसत पर कितनी मेमोरी का उपभोग होता है?लिनक्स कर्नेल प्रति टीसीपी/आईपी नेटवर्क कनेक्शन द्वारा कितनी मेमोरी खपत की जाती है?

+0

क्या आप कुछ और विस्तार से स्थिति का वर्णन कर सकते हैं? इसके बिना, सबसे अच्छा अनुमान है कि कोई भी देने में सक्षम होगा "1K और 10M के बीच", जो आपको बहुत मदद नहीं करेगा। मुझे लगता है कि आपका मतलब टीसीपी/आईपी कनेक्शन है जहां एक अंत (सर्वर?) आपकी मशीन है।क्या आप मान सकते हैं कि कनेक्शन वर्तमान में निष्क्रिय है, या कम से कम यह लटका नहीं है (यानी सबकुछ उचित समय में एसीकेड है)? – ugoren

उत्तर

40

TCP कनेक्शन स्मृति का सेवन के लिए पर sk_buff की

  1. आकार (आंतरिक नेटवर्किंग संरचना लिनक्स कर्नेल के द्वारा प्रयोग किया)

  2. पढ़ने और एक कनेक्शन

के लिए बफ़र लिखने निर्भर करता है

बफर का आकार आवश्यक

के रूप में tweaked किया जा सकता है

इन चरों

के लिए चेक इन गिरी

net.core.wmem_max = 131071 

net.core.rmem_max = 131071 

net.core.wmem_default = 126976 

net.core.rmem_default = 126976 

में सभी नेटवर्क कनेक्शन के लिए अधिकतम डिफ़ॉल्ट स्मृति बफर उपयोग निर्दिष्ट इन बफर स्मृति उपयोग TCP कनेक्शन

net.ipv4.tcp_mem = 378528 504704 757056 

net.ipv4.tcp_wmem = 4096 16384 4194304 

net.ipv4.tcp_rmem = 4096 87380 4194304 

के लिए विशिष्ट निर्दिष्ट निर्दिष्ट तीन मान "न्यूनतम डिफ़ॉल्ट अधिकतम" बफर आकार हैं। इसलिए लिनक्स से शुरू करने के लिए प्रत्येक कनेक्शन के लिए पढ़ने और लिखने वाले बफर के डिफ़ॉल्ट मानों का उपयोग किया जाएगा। कनेक्शन बढ़ने की संख्या के रूप में, इन बफर को कम किया जाएगा [अधिकतम न्यूनतम मूल्य तक] अधिकतम बफर मान के लिए भी यही मामला है।

ये मान इस sysctl -w KEY=KEY VALUE

जैसे का उपयोग कर सेट किया जा सकता। नीचे दिया गया आदेश सुनिश्चित करता है कि प्रत्येक कनेक्शन के लिए पढ़ने और लिखने वाले बफर 4096 प्रत्येक हैं।

sysctl -w net.ipv4.tcp_rmem='4096 4096 4096' 

sysctl -w net.ipv4.tcp_wmem='4096 4096 4096' 
-1

यह निर्भर करता है। कई सारी चीजों पर।
मुझे लगता है कि एक निष्क्रिय कनेक्शन कुछ सैकड़ों बाइट ले जाएगा।
लेकिन यदि डेटा में संचार और/या डेटा प्राप्त होता है, तो खपत बढ़ जाती है। खिड़की का आकार मोटे तौर पर इस खपत को सीमित कर सकता है।
डेटा के लिए अतिरिक्त खपत केवल प्राप्त/प्रेषण कतार में बाइट नहीं है। ओवरहेड्स हैं, इसलिए एक बाइट वाला एक सेगमेंट 2 के जैसा कुछ ले सकता है। टीसीपी इसे कम करने की कोशिश करता है, उदाहरण के लिए एक एकल sk_buff में खंडों को विलय करके, लेकिन यह हमेशा सफल नहीं होता है।

2

यह भी निर्भर करता है कि कौन सी परत पर निर्भर करता है। शुद्ध ब्रिजिंग परिदृश्य के मामले में, केवल पुल-स्तर एफडीबी है। जब रूटिंग खेल में आती है, तो रूटिंग टेबल और आईपी-स्तर एफडीबी/पड़ोसी डीबी होती है। और आखिरकार, एक बार जब स्थानीय सॉकेट नाटक में होता है, तो आपके पास निश्चित रूप से विंडो आकार, सॉकेट बफर (दोनों भेजते और प्राप्त होते हैं, और वे पिछली बार चेक किए गए 128k तक डिफ़ॉल्ट होते हैं), खंड सूची (यदि उपयोग की जाती है), तो वह जगह है जहां आपका स्मृति चला जाता है, लेकिन उपयोग में सभी भागों के साथ एक स्पष्ट कट जवाब मुश्किल है। स्थानीय स्ट्रीम सॉकेट के कुछ मेमोरी आंकड़े प्राप्त करने के लिए आप ss -m का उपयोग कर सकते हैं।

+0

क्या आप मुझे एसएस-एम' आउटपुट में 4 वर्ण (आर, डब्ल्यू, एफ, टी) समझा सकते हैं? – pradeepchhetri

संबंधित मुद्दे