Değeri düşürmek, mysql restart olmadan oldukça önemsizdir.
Zaman aşımını 30 saniyeye düşürmek istediğinizi varsayalım.
İlk önce bunu my.cnf dosyasına ekleyin.
[mysqld]
interactive_timeout=30
wait_timeout=30
O zaman böyle bir şey yapabilirsin
mysql -uroot -ppassword -e"SET GLOBAL wait_timeout=30; SET GLOBAL interactive_timeout=30"
Bundan sonraki tüm DB Bağlantıları 30 saniye içinde zaman aşımına uğrayacak
UYARI
Açıkça kullandığınızdan emin olun mysql_close. Çoğu geliştiricinin yaptığı gibi Apache'ye güvenmiyorum. Olmazsa, bazen, Apache'nin bir DB Bağlantısını kapattığı, ancak mysqld ve mysqld'in bu bağlantıyı zaman aşımına kadar açık tuttuğunu bildirmeyen bir yarış durumu vardır. Daha da kötüsü, TIME_WAIT'leri daha sık görebilirsiniz. Zaman aşımı değerlerinizi akıllıca seçin.
GÜNCELLEME 2012-11-12 10:10 EDT
UYARI
Gönderilen önerilerimi uyguladıktan sonra /root/show_mysql_netstat.sh
, aşağıdaki satırlarla adlandırılan bir komut dosyası oluşturun :
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/'
Bunu çalıştırdığınızda, böyle bir şey görmelisiniz:
[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
Herhangi bir web sunucusu için hala çok fazla mysql görüyorsanız, atmanız gereken iki adım:
ESCALATION # 1
Sorunlu web sunucusuna giriş yapın ve apache'yi aşağıdaki gibi yeniden başlatın:
service httpd stop
sleep 30
service httpd start
Gerekirse, bunu tüm web sunucularına yapın
service httpd stop (on all web servers)
service mysql stop
sleep 120
service mysql start
service httpd start (on all web servers)
ESCALATION # 2
İşletim sistemini mysql için TIME_WAITs veya aşağıdakilerle birlikte başka bir uygulamayı öldürmeye zorlayabilirsiniz:
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
Bu, TIME_WAIT'lerin 1 saniye içinde zaman aşımına uğramasını sağlar.
Kredinin vadesinde kredi vermek ...
wait_timeout
, yazılımın açık kalmasını beklediğinde bağlantının kapanmasına neden olursa, web sitesi yazılımınızın bozulmayacağından emin olmanız gerekir .