एक mysql पुनरारंभ के बिना मूल्य कम करना बहुत तुच्छ है
मान लीजिए कि आप 30 सेकंड तक का समय कम करना चाहते हैं
सबसे पहले, इसे my.cnf में जोड़ें
[mysqld]
interactive_timeout=30
wait_timeout=30
फिर, आप ऐसा कुछ कर सकते हैं
mysql -uroot -ppassword -e"SET GLOBAL wait_timeout=30; SET GLOBAL interactive_timeout=30"
इसके बाद के सभी DB कनेक्शन 30 सेकंड में टाइमआउट हो जाएंगे
चेतावनी
स्पष्ट रूप से mysql_close का उपयोग करना सुनिश्चित करें। मुझे अपाचे पर भरोसा नहीं है जैसा कि ज्यादातर डेवलपर्स करते हैं। यदि नहीं, तो कभी-कभी, एक दौड़ की स्थिति होती है, जहां अपाचे एक DB कनेक्शन को बंद कर देता है, लेकिन mysqld को सूचित नहीं करता है और mysqld उस कनेक्शन को तब तक खुला रखता है जब तक कि वह बाहर न निकल जाए। इससे भी बदतर, आप TIME_WAITs को अधिक बार देख सकते हैं। अपने टाइमआउट मूल्यों को समझदारी से चुनें।
UPDATE 2012-11-12 10:10 EDT
चेतावनी
मेरे पोस्ट किए गए सुझावों को लागू करने के बाद, /root/show_mysql_netstat.sh
निम्नलिखित पंक्तियों के साथ एक स्क्रिप्ट बनाएं :
netstat | grep mysql > /root/mysql_netstat.txt
cat /root/mysql_netstat.txt | awk '{print $5}' | sed 's/:/ /g' | awk '{print $2}' | sort -u > /root/mysql_netstat_iplist.txt
for IP in `cat /root/mysql_netstat_iplist.txt`
do
ESCOUNT=`cat /root/mysql_netstat.txt | grep ESTABLISHED | awk '{print $5}' | grep -c "${IP}"`
TWCOUNT=`cat /root/mysql_netstat.txt | grep TIME_WAIT | awk '{print $5}' | grep -c "${IP}"`
IPPAD=`echo "${IP}..................................." | cut -b -35`
(( ESCOUNT += 1000000 ))
(( TWCOUNT += 1000000 ))
ES=`echo ${ESCOUNT} | cut -b 3-`
TW=`echo ${TWCOUNT} | cut -b 3-`
echo ${IPPAD} : ESTABLISHED:${ES} TIME_WAIT:${TW}
done
echo ; echo
netstat -nat | awk '{print $6}' | sort | uniq -c | sort -n | sed 's/d)/d/'
जब आप इसे चलाते हैं, तो आपको कुछ इस तरह से देखना चाहिए:
[root@*** ~]# /root/ShowConnProfiles.sh
10.48.22.4......................... : ESTABLISHED:00002 TIME_WAIT:00008
10.48.22.8......................... : ESTABLISHED:00000 TIME_WAIT:00002
10.64.51.130....................... : ESTABLISHED:00001 TIME_WAIT:00000
10.64.51.133....................... : ESTABLISHED:00000 TIME_WAIT:00079
10.64.51.134....................... : ESTABLISHED:00002 TIME_WAIT:00001
10.64.51.17........................ : ESTABLISHED:00003 TIME_WAIT:01160
10.64.51.171....................... : ESTABLISHED:00002 TIME_WAIT:00000
10.64.51.174....................... : ESTABLISHED:00000 TIME_WAIT:00589
10.64.51.176....................... : ESTABLISHED:00001 TIME_WAIT:00570
1 established
1 Foreign
11 LISTEN
25 ESTABLISHED
1301 TIME_WAIT
यदि आप अभी भी TIME_WAITs
किसी भी दिए गए वेब सर्वर के लिए बहुत सारे mysql देखते हैं, तो यहां दो कदम उठाने की जरूरत है:
ESCALATION # 1
आक्रामक वेब सर्वर पर लॉग इन करें और अपाचे को पुनः आरंभ करें:
service httpd stop
sleep 30
service httpd start
यदि आवश्यक हो, तो इसे सभी वेब सर्वरों पर करें
service httpd stop (on all web servers)
service mysql stop
sleep 120
service mysql start
service httpd start (on all web servers)
ESCALATION # 2
आप निम्नलिखित के साथ OS को mysql या किसी अन्य ऐप के लिए TIME_WAITs मारने के लिए बाध्य कर सकते हैं:
SEC_TO_TIMEWAIT=1
echo ${SEC_TO_TIMEWAIT} > /proc/sys/net/ipv4/tcp_tw_recycle
echo ${SEC_TO_TIMEWAIT} > /proc/sys/net/ipv4/tcp_tw_reuse
इससे TIME_WAITs का समय 1 सेकंड में समाप्त हो जाएगा।
क्रेडिट देने के लिए जहां क्रेडिट देय है ...
wait_timeout
खुले रहने के लिए सॉफ़्टवेयर से अपेक्षा करती है कि कम कनेक्शन बंद हो जाए, तो आपकी वेब साइट सॉफ़्टवेयर नहीं टूटेगी ।