값을 낮추는 것은 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를 사용하십시오. 나는 대부분의 개발자들처럼 아파치를 믿지 않는다. 그렇지 않은 경우, 때때로 Apache가 DB 연결을 닫지 만 mysqld 및 mysqld가 연결이 시간 초과 될 때까지 열린 상태로 유지한다고 알려주지 않는 경쟁 조건이 있습니다. 더 나쁜 것은 TIME_WAIT가 더 자주 나타날 수 있다는 것입니다. 타임 아웃 값을 현명하게 선택하십시오.
업데이트 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이 표시되는 경우 다음 두 가지 에스컬레이션 단계를 수행하십시오.
에스컬레이션 # 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)
에스컬레이션 # 2
OS에서 다음을 사용하여 mysql 또는 다른 앱에 대해 TIME_WAIT를 강제 종료 할 수 있습니다.
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
열려있을 것으로 예상 할 때 연결 이 짧아 지면 웹 사이트 소프트웨어가 중단되지 않도록해야합니다 .