シスコのルータでトラぶったので、原因究明のメモ書き (シスコのコマンドONLY編)

ルータの調子が非常にわるくなり、原因究明をしたときのメモ書きです。

CPU使用状況を見る

show processes cpu history

で、下記のようにグラフが見れる。
CPUが完全に振り切っており、正直ひどい状況。

11111
999999990000099999999999999999999999999999999999999999999999
999999990000099999999999999999999999999999999999999999999999
100 ************************************************************
90 ************************************************************
80 ************************************************************
70 ************************************************************
60 ************************************************************
50 ************************************************************
40 ************************************************************
30 ************************************************************
20 ************************************************************
10 ************************************************************
0....5....1....1....2....2....3....3....4....4....5....5....6
0 5 0 5 0 5 0 5 0 5 0
CPU% per second (last 60 seconds)

1 1 111 111 1111 111 1111 1111 1 1 1 1 11 11 11 11 1
099099000990009900009900090000900009090909099009009009009990
099099000990009900009900090000900009090909099009009009009990
100 ############################################################
90 ############################################################
80 ############################################################
70 ############################################################
60 ############################################################
50 ############################################################
40 ############################################################
30 ############################################################
20 ############################################################
10 ############################################################
0....5....1....1....2....2....3....3....4....4....5....5....6
0 5 0 5 0 5 0 5 0 5 0
CPU% per minute (last 60 minutes)
* = maximum CPU% # = average CPU%

11111111111111111111111
000000000000000000000006111111111111111111111111111111111111111211111111
000000000000000000000002457467353754644569354946643267466543156777855548
100 ###################**#*
90 ######################*
80 ######################*
70 #######################
60 #######################*
50 #######################*
40 #######################*
30 #######################* *
20 ######################## ** ** * ** * *** * * ** ** *** ********* *
10 ########################************************************************
0....5....1....1....2....2....3....3....4....4....5....5....6....6....7..
0 5 0 5 0 5 0 5 0 5 0 5 0
CPU% per hour (last 72 hours)
* = maximum CPU% # = average CPU%


インターフェース使用状況を見る

show interface

で、インターフェースの状況を確認する。
インターフェースが死んでいるとかではなく、がんがんパケットが飛びまくりでハングっている状況が見えてくる。

GigabitEthernet0 is up, line protocol is up
 Hardware is PQII_PRO_UEC, address is XXXXX
 Description: $ES_WAN$$FW_OUTSIDE$
 MTU 1500 bytes, BW 1000000 Kbit/sec, DLY 10 usec,
  reliability 255/255, txload 1/255, rxload 1/255
 Encapsulation ARPA, loopback not set
 Keepalive set (10 sec)
 Full-duplex, 1000Mb/s, media type is RJ45
 output flow-control is unsupported, input flow-control is unsupported
 ARP type: ARPA, ARP Timeout 04:00:00
 Last input 4w3d, output 00:00:00, output hang never
 Last clearing of "show interface" counters never
 Input queue: 0/75/319/0 (size/max/drops/flushes); Total output drops: 0
 Queueing strategy: fifo
 Output queue: 0/40 (size/max)
 5 minute input rate 2377000 bits/sec, 680 packets/sec
 5 minute output rate 5742000 bits/sec, 1828 packets/sec
  252510487 packets input, 3386169169 bytes, 0 no buffer
  Received 0 broadcasts, 13 runts, 0 giants, 23 throttles
  18 input errors, 0 CRC, 0 frame, 17 overrun, 1 ignored
  0 watchdog, 0 multicast, 0 pause input
  0 input packets with dribble condition detected
  300310044 packets output, 2164398300 bytes, 0 underruns
  0 output errors, 0 collisions, 3 interface resets
  0 unknown protocol drops
  0 babbles, 0 late collision, 0 deferred
  0 lost carrier, 0 no carrier, 0 pause output
  0 output buffer failures, 0 output buffers swapped out


パケットの送受信状況を見る

誰がパケットを飛ばしているのか犯人を捜す。
そのために、NetFlowを有効にする。

Cisco1812J(config)#ip flow-export source FastEthernet1
Cisco1812J(config)#ip flow-export version 5
Cisco1812J(config)#ip flow-export destination [監視ツールサーバのIP] 9996


あと、監視するインターフェース(vlan?)にNetFlowを仕掛ける。

Cisco1812J(config)#int vlan 1
Cisco1812J(config-if)#ip route-cache flow
Cisco1812J(config-if)#ip flow ingress
Cisco1812J(config-if)#ip flow egress


これで、どのようなパケットがどこから飛んでいるか見れるようになる。
ってことで確認。


show ip cache flow


どんな種類のプロトコルが飛んでいるかとか、トラフィックを垂れ流しにしているIPとかを見ることができる。
で、下記のような情報を確認し、やらかしていたマシンを殺してとりあえず、問題解決しました。

IP packet size distribution (19678699 total packets):
1-32 64 96 128 160 192 224 256 288 320 352 384 416 448 480
.000 .095 .033 .002 .002 .001 .000 .000 .000 .024 .025 .435 .068 .044 .006

512 544 576 1024 1536 2048 2560 3072 3584 4096 4608
.034 .006 .007 .015 .193 .000 .000 .000 .000 .000 .000

IP Flow Switching Cache, 278544 bytes
28 active, 4068 inactive, 179141 added
3421816 ager polls, 0 flow alloc failures
Active flows timeout in 30 minutes
Inactive flows timeout in 15 seconds
IP Sub Flow Cache, 34056 bytes
28 active, 996 inactive, 166192 added, 166192 added to flow
0 alloc failures, 0 force free
1 chunk, 1 chunk added
last clearing of statistics never
Protocol Total Flows Packets Bytes Packets Active(Sec) Idle(Sec)

                • Flows /Sec /Flow /Pkt /Sec /Flow /Flow

TCP-WWW 40144 0.5 103 892 58.6 2.1 6.5
TCP-SMTP 2 0.0 1 44 0.0 0.0 8.6
TCP-X 68 0.0 1 40 0.0 0.0 8.5
TCP-other 71925 1.0 43 716 44.1 5.9 11.4
UDP-DNS 22440 0.3 1 74 0.3 0.2 15.5
UDP-NTP 2471 0.0 1 76 0.0 0.0 15.4
UDP-Frag 20 0.0 2 450 0.0 0.0 15.4
UDP-other 39870 0.5 309 380 173.3 2.5 15.4
ICMP 2173 0.0 11 118 0.3 24.8 15.3
Total: 179113 2.5 109 541 276.8 3.8 11.8

SrcIf SrcIPaddress DstIf DstIPaddress Pr SrcP DstP Pkts
Vl1 XX.XX.XX.222 Vl1 XX.XX.YY.10 06 E226 0386 28
Di0 70.37.64.202 Vl1 YY.YY.YY.YY 06 01BB C26B 3
Di0 70.37.64.202 Vl1 YY.YY.YY.YY 06 01BB C29D 112
Di0 202.232.2.39 Local YY.YY.YY.YY 11 0035 C005 1
Vl1 XX.XX.XX.222 Vl1 XX.XX.YY.200 11 0089 0089 2

SrcIf SrcIPaddress DstIf DstIPaddress Pr SrcP DstP Pkts
Vl1 XX.XX.XX.12 Di0 65.52.178.73 06 C2BD 0D3D 1
Vl1 XX.XX.XX.222 Vl1 10.10.70.200 11 0089 0089 2
Vl1 XX.XX.XX.29 Null 255.255.255.255 11 445C 445C 2
Vl1 XX.XX.XX.45 Di0 70.37.127.110 06 DDA9 01BB 2

OpenCVとjavaCVで画像比較を目論む 1

自分で画像比較用のロジックをちまちま作っていたのだけど(色ヒストグラム系)、常識的に考えて自分で作るものではなかろうということで、いまさらながらOpenCVに手を出しました。
が、ネット上に転がっているのは、顔認識系、物体検知系がほとんどで単純な画像比較がなかったので、そのメモです。

あと、最初に断っておくと、まだ未完成で実用には耐えません。


インストール

下記の3点をインストールします。


コード

まず、よく使うっぽいimport文
これからのコードは全部、下記importがあることが前提になってます。

import static com.googlecode.javacv.jna.cxcore.*;
import static com.googlecode.javacv.jna.cv.*;
import static com.googlecode.javacv.jna.highgui.*;
import static com.googlecode.javacv.jna.cvaux.*;

import com.googlecode.javacv.CanvasFrame;
import com.googlecode.javacv.jna.cxcore.CvMat;
import com.googlecode.javacv.jna.cxcore.CvPoint2D32f;
import com.googlecode.javacv.jna.cxcore.CvRect;
import com.googlecode.javacv.jna.cxcore.IplImage;
import com.googlecode.javacv.jna.cxcore.CvSize.ByValue;
import com.sun.jna.ptr.DoubleByReference;

で、基本となるイメージのロード

public static IplImage loadImage(String path) {
	IplImage image = cvLoadImage(path, CV_LOAD_IMAGE_COLOR);
	if (image == null) {
		throw new IllegalArgumentException(path);
	}
	return image;

}

イメージの表示。

public static void showImg(IplImage img, int time, String name) {
	CanvasFrame canvas = new CanvasFrame(name);
	canvas.showImage(img);
	
	sleep((long) time);
	
	canvas.dispose();

}

イメージのリサイズ。

public static IplImage resize(IplImage image, float f) {
	// TODO 元画像からチャネルの取り方がわからない・・・
	IplImage cvCreateImage = cvCreateImage(new ByValue(
			(int) (image.width * f), (int) (image.height * f)),
			image.depth, 3);
	cvResize(image, cvCreateImage, 0);
	return cvCreateImage;
}


で、肝心の画像比較。
一致部分の検出をそこを枠でくくるコード。

public static IplImage matchTemplateAndRectangle(IplImage image,
		IplImage template) {

	DoubleByReference min_val = new DoubleByReference();
	DoubleByReference max_val = new DoubleByReference();


	CvPoint min_loc = new CvPoint();
	CvPoint max_loc = new CvPoint();

	ByValue size = cvSize(image.width - template.width + 1, image.height
			- template.height + 1);

	IplImage dest_img = cvCreateImage(size, IPL_DEPTH_32F, 1);
	cvMatchTemplate(image, template, dest_img, CV_TM_CCORR_NORMED);

	cvMinMaxLoc(dest_img, min_val, max_val, min_loc, max_loc, null);

	IplImage clone = image.clone();
	cvRectangle(clone, max_loc.byValue(), cvPoint(max_loc.x + cut.width,
			max_loc.y + cut.height), CV_RGB(255, 0, 0), 3, 1, 0);
	return clone;
}


結果

対象画像

比較画像

一致部分を赤枠(Print Screenの為、色が、、、)

問題

上記だけ見ますと問題なく抽出されているように見えますが、実は実用には大きな問題有ります。
上記のコードで比較できるのは、「比較画像」が「対象画像」より切り出されたものである必要がある模様です。

自炊した書籍の表紙と、アマゾンより取得した表紙画像では全然マッチングできませんでした。


今後はヒストグラム生成して比較するタイプのメソッドを試す予定です。

tips

JavaCVは、JavadocがないためC++等のOpenCVのドキュメントを睨みながら使い方を推測することになります。
ってことで、参考にした中でよかったサイトの紹介です。

下記のサイトが一番目的別のサンプルが充実していてよかったです。

http://opencv.jp/sample/matching.html

ねんがんの「タジン鍋」を手に入れたぞ!

[rakuten:p-image:10028301:detail]


1.『そう かんけいないね』
2.『殺してでも うばいとる』
3.『ゆずってくれ たのむ!!』


いや、ちゃんと普通に店で買いましたよ。今更って気もしますが、最近蒸し物系の調理が多いのでどんなもんか色々やってみようと思います。


以下、ウィキペディアより転載。

一般にタワスという独特の皿に盛りつけられる。これはキプロス料理で使用される皿と同一の物である。伝統的なタジンポットは板ガラスをはめつけた部分と、塗装された外側の二つの部分から形成される。上の口にあたる部分は細く、底の部分は太くなっており、円錐かドーム型の形をしている。このような形状をしている所以は、円錐形の蓋の上部の温度が低くなっているため、食材から上がる水蒸気を蓋で冷やし、再び水滴となって食材のもとへ戻すためである。また、それによって下部に熱を集中させやすくしている。
ロッコでは飲料水は非常に貴重だった。そのような風土的要因から、食材の水分だけで調理できるタジンは作られたともいえ、一般的な家庭料理となっている。


タジン鍋

あと、タジン鍋関連の記事。

簡単かつヘルシーな蒸し料理がブームだが、その象徴といえるのが「タジン鍋」人気。野菜から出る水分などで調理できる点が魅力で、タジン鍋の専用コーナーを設ける店があるほど。


・・・・・


この鍋が今、とにかく売れている。ヘルシーな蒸し料理ブームに伴い、昨年から百貨店やネット通販などで人気が急上昇。タジン鍋を2007年から販売するエミール・アンリでは、08年には前年の5倍以上を売り上げたという。


蒸し料理ブームで売れてる「タジン鍋」、本場モロッコの味に近いのは?


う〜ん。まあ、マンガにも出てくるぐらいなので、相当はやってみるたいですね。。。