レンタルサーバー・自宅サーバー設定・構築のヒント
レンタルサーバー・自宅サーバー設定・構築のヒント - レンタルサーバー・自宅サーバーの設定・構築情報を公開しています。

C5 C6 S6

Apacheのキャッシュを削除するhtcachecleanを使ってみる

2013年4月15日 2014年1月10日
apache cache remove

Apacheのキャッシュ(mod_cache,mod_disk_cache)を使ってみる では、Apacheによるキャッシュの設定方法について、簡単に解説しました。

今回は、その mod_disk_cache でディスクへキャッシュされたファイル、ディレクトリを削除するツール htcachecleanを使ってみたいと思います。

$ htcacheclean
htcacheclean -- program for cleaning the disk cache.
Usage: htcacheclean [-Dvtrn] -pPATH -lLIMIT [-PPIDFILE]
       htcacheclean [-nti] -dINTERVAL -pPATH -lLIMIT [-PPIDFILE]

オプション:
  -d interval 
       このオプションは、デーモンプロセスでキャッシュの削除処理を実施します。
       その削除する間隔を、-d interval の interval にて分で設定します。
       また、このオプションは、-D, -v, -r と同時に使用できません。
       デーモンをシャットダウンするときは、SIGTERMかSIGINTシグナルを送ります。

  -D 
       デモ実行します。デモ実行のため、実際にはなにも削除しません。
       また、このオプションは、-d と同時に使用できません。

  -v   
       出力モードで動作し、統計情報を出力します。
       このオプションは-dオプションとは同時に使用できません。

  -r
       全消去します。
       このオプションが指定するときは、apacheウェブサーバは停止しているものとします。
       (もし、停止していない場合は、キャッシュにごみが残る場合があります。)
       このオプションは-dとは同時に使用できません。また、-tオプションを含んでいます。

  -n
       このオプションを指定すると、快適に実行します。
       この快適の意味は、他のプロセスのために、よりゆっくりと実行することを意味します。
       htcachecleanは、
       (a)ディスクIOは延期が発生し、
       (b)カーネルは、他のプロセスをスケジュールすることができるまで
       の間、随時スリープ状態になります。

  -t
       すべての空のディレクトリを削除します。
       デフォルトでは、キャッシュファイルだけが削除されますが、設定によっては、大量の
       ディレクトリが作成されることに注意する必要があります。
       もし、大量のディレクトリを作成するように設定されている場合、inodeやファイル
       アロケーションテーブルなどのリソースが枯渇するかもしれません。
       そのような設定に、このオプションは、おすすめです。

  -p path
       ディスクキャッシュのルートディレクトリとしてパスを指定します。
       これは、CacheRoot で指定したものと同じものを指定する必要があります。

  -P path
       pid を書き込むための PIDFILEを設定します。

  -l limit   
       総ディスクキャッシュサイズの上限を設定します。
       この値は、デフォルトではバイトです。'K'を付けて指定すると KByte、'M'を付けて指定
       すると MByte の意味になります。

  -i  
       ディスクキャッシュの変更があったときにのみ実行されます。 このオプションは、
       -d オプションと一緒に使用します。

htcachecleanを使ってみる

まずは、htcachecleanをシェルから直接起動してみましょう。
とりあえずは、-D オプションを付けておけば、実際に削除されることはありませんので、-v オプションとともに使用すると どんな動作をするのか確認できます。

以下は、Apacheのキャッシュ(mod_cache,mod_disk_cache)を使ってみる のApacheのmod_disk_cacheの設定例の場合のhtcachecleanの実行例です。

$ htcacheclean -v -D -p /tmp/cache -l 10k
Statistics:
size limit 10.0K
total size was 17.0K, total size now 9.2K
total entries was 2, total entries now 1

ここでは、オプションをそれぞれ以下のように指定しています。

  • -v -D : 出力モード、デモ実行で、シミュレートします。
  • -p : キャッシュディレクトリのパスを指定します。ここでは、/tmp/cacheとしています。
    ( Apacheの設定ファイル内の CacheRoot にて設定してるパスを指定します。)
  • -l : キャッシュディレクトリの上限サイズを指定します。ここでは、10k(10KByte)としています。

この結果、出力情報を見ると、以下のことがわかります。

  • total size : 実行前の全体サイズが、17.0K(Byte)となっています。
  • total size now : 実行後の全体サイズが、9.2K(Byte)となっています。(ちゃんと 10KByte以下になっています)
  • total entries : 実行前のファイル数が、2(個)となっています。
  • total entries now : 実行後のファイル数が、1(個)となっています。(ちゃんと 1個のファイルを削除したことがわかります)
キャッシュディレクトリは、以下のようになっていたので、ファイルサイズが実行後 9.2K(Byte) となっていることから、 古い方(以下の赤文字)から削除されているのがわかりますね。
$ ls -lR /tmp/cache/
/tmp/cache/:
合計 8
drwx------ 3 apache apache 4096  4月  2 13:33 2013 5
drwx------ 3 apache apache 4096  4月  2 15:39 2013 p

/tmp/cache/5:
合計 4
drwx------ 2 apache apache 4096  4月  2 13:33 2013 g

/tmp/cache/5/g:
合計 12
-rw------- 1 apache apache 7736  4月  2 13:33 2013 iQZ4J4tNyfDfHRGb_E9w.data
-rw------- 1 apache apache  325  4月  2 13:33 2013 iQZ4J4tNyfDfHRGb_E9w.header

/tmp/cache/p:
合計 4
drwx------ 2 apache apache 4096  4月  2 15:39 2013 p

/tmp/cache/p/p:
合計 16
-rw------- 1 apache apache 9104  4月  2 15:39 2013 SKX8vj@dV8mZ2TSAsBUw.data
-rw------- 1 apache apache  328  4月  2 15:39 2013 SKX8vj@dV8mZ2TSAsBUw.header

一通り簡単な確認ができたら、次は、デーモンプロセスで、常駐、常時削除するように設定してみます。


htcachecleanのデーモンを使ってみる

htcachecleanのデーモンを使うために、通常のデーモン管理と同じように、 サービス用のスクリプトを /etc/init.d/htcacheclean を作成して、デーモンの管理を行います。


サービス用のスクリプトを /etc/init.d/htcacheclean を作成する

まずは、サービス用のスクリプトを /etc/init.d/htcacheclean として以下のように作成します。


[/etc/init.d/htcacheclean]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/bin/bash
#
# htcacheclean   Startup script for the Apache cache cleaner
#
# chkconfig: - 85 15
# description: The Apache htcacheclean daemon maintains and prunes the
#              size of the mod_disk_cache cache directory.
# processname: htcacheclean
# config: none

### BEGIN INIT INFO
# Provides: htcacheclean
# Required-Start: $local_fs $remote_fs $network
# Required-Stop: $local_fs $remote_fs $network
# Should-Start: httpd
# Short-Description: start and stop Apache htcacheclean
# Description: The Apache htcacheclean daemon maintains a mod_disk_cache
### END INIT INFO

# Source function library.
. /etc/rc.d/init.d/functions

prog=$(basename $0 | sed -e 's/^[SK][0-9][0-9]//')

# ↓↓↓ ここから環境変数、パラメータの設定 ↓↓↓
# htcachecleanのフルパスを指定します。
htcacheclean=/usr/sbin/htcacheclean
# lockfileのフルパスを指定します。
lockfile=/var/lock/subsys/${prog}
# pidfileのフルパスを指定します。
pidfile=/var/log/httpd/${prog}.pid

# htcachecleanデーモンの実行間隔を分で指定します。
INTERVAL=5
# htcachecleanデーモンへ渡すキャッシュディレクトリのフルパスを指定します。
CACHEPATH=/tmp/cache
# htcachecleanデーモンへ渡すキャッシュディレクトリの上限サイズを指定します。
LIMIT=100M
# htcachecleanデーモンへ渡すオプションを指定します。
OPTIONS="-n -t -i"
# ↑↑↑ ここまで環境変数、パラメータの設定 ↑↑↑

RETVAL=0

start() {
        echo -n $"Starting $prog: "
        daemon --pidfile=${pidfile} $htcacheclean -d "$INTERVAL" -p "$CACHEPATH" -l "$LIMIT" -P "$pidfile" $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}
stop() {
	echo -n $"Stopping $prog: "
	killproc -p ${pidfile} $htcacheclean
	RETVAL=$?
	echo
	[ $RETVAL = 0 ] && rm -f ${lockfile}
}

# See how we were called.
case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  status)
        status -p ${pidfile} $htcacheclean
	RETVAL=$?
	;;
  restart)
	stop
	start
	;;
  condrestart)
	if status -p ${pidfile} $htcacheclean >&/dev/null; then
		stop
		start
	fi
	;;
  *)
	echo $"Usage: $prog {start|stop|restart|condrestart|status|help}"
	exit 1
esac

exit $RETVAL

サービス用のスクリプトを /etc/init.d/htcacheclean を実行する

先に作成した サービス用のスクリプト /etc/init.d/htcacheclean を実行してみましょう。
実行の仕方は、通常のサービスと同じように start/stop で起動・停止できます。

$ /etc/init.d/htcacheclean start
htcacheclean を起動中:                                     [  OK  ]

$ /etc/init.d/htcacheclean stop
htcacheclean を停止中:                                     [  OK  ]

こんな感じで出力されればOKです。

また、起動したら以下のようにプロセスが起動されているはずですので、合わせて確認しておきましょう。

$ ps aux|grep htcacheclean
root     20997  0.0  0.0   5144   644 ?        Ss   08:39   0:02 /usr/sbin/htcacheclean -d 5 -p /tmp/cache -l 100M -P /var/log/httpd/htcacheclean.pid -n -t -i
root     21133  0.0  0.0   5436   816 pts/1    S+   18:56   0:00 grep htcacheclean


サービス用のスクリプトを 再起動しても自動的に立ち上がるように設定する

CentOS Scientific Linux の場合

$ chkconfig --add htcacheclean
$ chkconfig --list | grep htcacheclean
htcacheclean     0:off   1:off   2:on    3:on    4:on    5:on    6:off


ここまでやっておけば、システム再起動後でもhtcachecleanが動作しますので、キャッシュディレクトリの上限サイズを超えることはないでしょう。


Apacheの mod_disk_cache は、基本的にキャッシュを削除しません。 有効期限が切れても削除しません。次にキャッシュされるときに上書きするだけです。

そのため、Apacheの mod_disk_cache を使った場合、キャッシュディレクトリがひたすら膨張することがあります。 その場合、このhtcachecleanを起動しておけば、少なくとも指定したディスク上限サイズ内でキャッシュファイルの削除を行ってくれるので、非常に便利ですし、 Apacheで mod_disk_cache を使用する場合は、起動しておくべきでしょう。

ただ、これは、ディスクキャッシュされたものをサイズ上限を超えないように削除してくれるだけです。有効期限などは関係ありません。上限サイズが閾値(トリガー)になります。
さらには、削除したいURLを指定してキャッシュを削除することもできません。

つまり、すぐに最新情報に更新したいときは、全削除しかないのです。(ただ、最新バージョンの2.4では改良されているようで、URLを指定できるみたいです。)
これも nginx(nginx でリバースプロキシ、FastCGIキャッシュのキャッシュを削除する方法をまとめて解説してみた) と同じようにURLからキャッシュファイルを設定できるのですが、それは、次回にでも記事にしようと思います。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない検索ができないことがあります。


関連記事 :

php-fpm は、php-cgi で代用できる

これまで、php-fpm による FastCGIの構築について書いてきました。 CentOS Scientific Linux : ...

sendmail で dkim-milter を使ってDomainKeys ,DKIM の対応する

以前の記事 評判のさくらのVPSでSMTP(Sendmail)を公開する時にやっておきたいこと では、SPFの送信側の対処 sendmai ...

Monitを使ってApacheを監視する(1)

Apacheについての設定をいろいろと取り上げてきました。 Apacheの同時アクセスを制限(mod_limitipconn)する ...

Apache でディスクキャッシュを削除する方法をまとめて解説してみた

Apache でキャッシュを削除する方法は、一応、公式なものは、htcachecleanを使っての削除のみです。 Apacheのキャッ ...

Apacheのキャッシュ(mod_cache,mod_disk_cache)を使ってみる

キャッシュ機能あるのは、Nginxだけではありません。 Apacheにもあります。 Apacheでキャッシュ機能を利用するには、mod_ca ...



コメントを投稿 :

お名前 *

メールアドレス *
( メールアドレスが公開されることはありません。)

サイトアドレス

コメント *

* 印の項目は、入力が必要な項目です。




最近投稿の記事

[ 画像提供元 : Amazon ] 先日、1TBのディスクの入れ替え時にバックアップをとろうとディスクコピーを行いました。 その際 ...

Windows で Linux ファイルシステム Ext4 のディスクをマウントするには? Ext3Fsd が、おそらく、最も簡単なツール ...

今回は、Windows で Compass を使ってみました。 Compass とは、 Sass(サス、Syntactica ...

今回は、Anti Adblock を使ってみました。 Anti Adblock とは、 そもそも Adblock という ウェブ ...

デスクトップ環境でない サーバーで、Webページのキャプチャー画像をコマンドで撮る には、wkhtmltoimage, CutyCapt ...


さくらのVPS 全プラン リニューアルです。(石狩(北海道)も選択可)


root権限ありで ¥685 / 月 ~ と非常にリーズナブルな CPU 1(core)の 512 プランから、 最高 CPU 10(core), メモリ 32(GB), SSD容量 800(GB) までとプランが充実。
ディスクは、SSDとHDDの選択が可能になった他、データセンターは人気の東京、石狩(北海道)となりました。

また、どのプランでも好きなOSが選べます
( CentOS, Fedora, Scientific Linux, FreeBSD, Ubutu, Debian )

管理人もおすすめのVPSです。
試用期間がありますから、一度、お試しを!!

詳しくは、http://vps.sakura.ad.jp/さくらのVPSのサイトへ へどうぞ!!

カテゴリ


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。
最近、スワップにも対応した Serverman@VPS は、かなりリーズナブルかもです。

  • メモリ1GB~2GBのEntryプラン :月額:490円
  • メモリ2MB~4GBのStandardプラン :月額:980円
  • メモリ4GB~8GBのProプラン :月額:1,980円

新規申し込みで1ヶ月間完全無料となるキャンペーンを実施中です。
Serverman@VPSの特徴は、安さとIPv6対応です。また、初期設定費0円もポイントです。

IPv6でちょっと遊んでみたい方には、おすすめかもしれませんね。最低利用期間もありませんから、気に入らないときは即解約もできます。

Serverman@VPSの詳細については、 http://dream.jp/vps/ Serverman@VPSのサイトへへどうぞ。



KVM採用 ConoHa VPSは、時間単位で借りれる便利なVPSです。


ConoHa VPS は、初期設定費0円最低利用期間無し時間単位で清算可能、 さらに、Web APIを使って自動化を図ることもできる便利なVPSです。

海外サーバー設置も可能で、ローカル接続にも対応と、かなり、機能豊富なサーバーです。

新規ユーザ登録で、クーポンもらえますから、まずは、お試しですね。

ConoHa VPSの詳細については、
http://www.conoha.jp/ へどうぞ。

KVM採用 お名前.com VPS(KVM) 2G プラン 初期設定費無料 キャンペーン 実施です。


メモリ2GBプラン CPU:3core、Disk:200GB
月額:1,153円から (初期設定:1,680円0円)

さくらのVPSがリニューアルされてもなんのその。
1GBメモリ / 2Core を ¥834 – の格安価格で提供中です!
間違いなくスペックからすると割安感ありです。
年間割引時の途中解約で返金がないのは、 ちょっと残念ですが、それでもこの割安感は魅力です。

まずは、お試しですね。

お名前.com VPS(KVM)の詳細については、
http://www.onamae-server.com/vps/ へどうぞ。(お試し期間が15日あります。)



  • ソーシャルブックマーク

  • はてなブックマークへ追加するはてな登録数
ページトップへ
Time : 0.7884 [s]