web-dev-qa-db-ja.com

開始/停止に時間がかかりすぎる

私のubuntuマシンでは、ブート時に起動するデーモンとしてsquidがあります。

問題は、squidの起動と停止に時間がかかり(30秒以上)、OSの起動/シャットダウン時間がかなり遅くなることです。

この問題を解決するにはどうすればよいですか?

6
nixnotwin

Shutdown_lifetimeというパラメーターがあります。デフォルト値は30秒​​です。

そのため、Squidはシャットダウン要求を受信すると、終了するまで少なくとも30秒待機します。

$ grep -B 8 "# shutdown_lifetime" /etc/squid3/squid.conf 

#  TAG: shutdown_lifetime   time-units
#   When SIGTERM or SIGHUP is received, the cache is put into
#   "shutdown pending" mode until all active sockets are closed.
#   This value is the lifetime to set for all open descriptors
#   during shutdown mode.  Any active clients after this many
#   seconds will receive a 'timeout' message.
# Default:
# shutdown_lifetime 30 seconds

最後の行を「コメント解除」して、より短い時間を設定するだけです。

shutdown_lifetime 10 seconds 

詳細については、以下を参照してください。

http://www.squid-cache.org/Doc/config/shutdown_lifetime/

12
Chris Woollard

Debian Wheezy用のSquid 3.1.20-2.2パッケージでこれを見つけました。

 $ vim /etc/init.d/squid3
 ...
 78
 79 stop () {
 80         PID=`cat $PIDFILE 2>/dev/null`
 81         start-stop-daemon --stop --quiet --pidfile $PIDFILE --exec $DAEMON
 82         #
 83         #       Now we have to wait until squid has _really_ stopped.
 84         #
 85         sleep 2
 86         if test -n "$PID" && kill -0 $PID 2>/dev/null
 87         then
 88                 log_action_begin_msg " Waiting"
 89                 cnt=0
 90                 while kill -0 $PID 2>/dev/null
 91                 do
 92                         cnt=`expr $cnt + 1`
 93                         if [ $cnt -gt 24 ]
 94                         then
 95                                 log_action_end_msg 1
 96                                 return 1
 97                         fi
 98                         sleep 5
 99                         log_action_cont_msg ""
100                 done
101                 log_action_end_msg 0
102                 return 0
103         else
104                 return 0
105         fi
106 }
107...

、この関数はこの認識されない信号(0)を使用しています。


回避策:90行目で、信号を15などのSIGTERM信号に変更します。

 90                 while kill -15 $PID 2>/dev/null


その後、Squidの起動/停止時に遅延は発生しません。

$ time /etc/init.d/squid3 stop
[ ok ] Stopping Squid HTTP Proxy 3.x: squid3.

real    0m2.036s
user    0m0.004s
sys     0m0.000s

$  time /etc/init.d/squid3 start
[ ok ] Starting Squid HTTP Proxy 3.x: squid3.

real    0m0.036s
user    0m0.004s
sys     0m0.004s

注意:サービスの高速開始/停止を提供しますが、この回避策は、独自の理由でシグナル0を使用するスクリプトの目的を損なう可能性があります。

0
ivanleoncz