
現在のルールCPU
がどれくらい消費するかを知りたいです。memory
iptables
ps
および を調べようとしましたhtop
が、カーネル スレッドが表示されていても に関連するものは何も見つかりませんでしたiptables
。
conntrack
私は、次のモジュール固有の設定でモジュールを使用しています: xt_recent.ip_pkt_list_tot=1
xt_recent.ip_list_tot=4096
。これはかなり高い値だと思います4096
。また、私の iptables 構成では、2 種類のブロック リストを使用しています:BLACKLIST
およびPORTSCAN
。
-A INPUT -i eth0 -p icmp -j ACCEPT
-A INPUT -i eth0 -s 1.2.3.4/32 -j ACCEPT
-A INPUT -i eth0 -m recent --rsource --name BLACKLIST --seconds 14400 --update -j DROP
-A INPUT -i eth0 -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -i eth0 -m recent --rsource --name PORTSCAN --seconds 3600 --update -j DROP
-A INPUT -i eth0 -p udp -m udp --dport 5060 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 5061 -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --dport 5062:5100 -j ACCEPT
-A INPUT -i eth0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -m recent --rsource --name PORTSCAN --set -j DROP
-A INPUT -i eth0 -j DROP
-A INPUT -j DROP
サーバー上でネットワークの問題が発生しており、私のiptables
ルールが影響しているのではないかと考えています。例:
- セッション
ssh
が頻繁に中断されます。 - Pingは0.2%のパケット損失を報告します
許可されたポートに接続している場合、つまり、アイテムが多い場合は、空の場合に比べて
5060
明らかに時間がかかります。PORTSCAN
この問題をトラブルシューティングする最善の方法は何でしょうか?
- iptables ルールを最適化できる方法はありますか?
- によって CPU がどの程度消費されているかを確認するにはどうすればよいですか
iptables
?
答え1
Linux カーネルのプロセス:
Iptables などのカーネルの多くの機能は、カーネル レベルで kworker タスクとして処理され、top などのタスク マネージャーに表示されます。コメントで述べたように、ルールをロードした場合とロードしなかった場合の合計リソース使用量を比較することで、CPU とメモリの使用量を計算することができます。ルールで使用しない場合でも、すでにメモリを消費しているiptables
ことに注意してください。ipset
クワーカーカーネルワーカースレッドのプレースホルダープロセスで、割り込み、タイマー、I/O などがある場合に特にカーネルの実際の処理のほとんどを実行します。これらは通常、実行中のプロセスに割り当てられた「システム」時間の大部分に相当します。これはシステムから安全に削除できるものではなく、デスクトップアプリケーションとはまったく関係がありません (ただし、これらのプログラムがシステムコールを発行する場合は、カーネルに何らかの処理を要求する可能性があります)。また、kworker
Linux カーネルプロセスが「作業」(システムコールの処理) を実行していることも意味します。プロセスリストには複数のプロセスを含めることができます。1kworker/0:1
つ目の CPU コア上のプロセス、kworker/1:1
2 つ目の CPU コア上のプロセスなどです。カーネルのすべてのプロセスは、kスレッドカーネル空間上のプロセス。
親プロセス:のプロセス ID はkthreadd
2 で、このカーネル ワーカーは次のように一覧表示できます。
pstree 2 -l -p
# or
ps --ppid 2 -u
# or
ps --ppid 2 -o pid,user,%mem,command,time,etime,cpu,pcpu,nice,pcpu,vsz
最後のものは、bash + cronスクリプトを使用して変更を監視するために使用できます...または、直接の時間指定分析には、 ( )perf
を使用できます。apt-get install linux-tools-common linux-tools-3.11.0-15-generic
# Record 10 seconds of backtraces on all your CPUs:
sudo perf record -g -a sleep 10
# Analyse your recording:
sudo perf report
コールグラフをナビゲートするには←、→、↑、↓そしてEnter。