Linux カーネルのプロセス:

Linux カーネルのプロセス:

現在のルールCPUがどれくらい消費するかを知りたいです。memoryiptables

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 などがある場合に特にカーネルの実際の処理のほとんどを実行します。これらは通常、実行中のプロセスに割り当てられた「システム」時間の大部分に相当します。これはシステムから安全に削除できるものではなく、デスクトップアプリケーションとはまったく関係がありません (ただし、これらのプログラムがシステムコールを発行する場合は、カーネルに何らかの処理を要求する可能性があります)。また、kworkerLinux カーネルプロセスが「作業」(システムコールの処理) を実行していることも意味します。プロセスリストには複数のプロセスを含めることができます。1kworker/0:1つ目の CPU コア上のプロセス、kworker/1:12 つ目の CPU コア上のプロセスなどです。カーネルのすべてのプロセスは、kスレッドカーネル空間上のプロセス。

親プロセス:のプロセス ID はkthreadd2 で、このカーネル ワーカーは次のように一覧表示できます。

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


リンク:123456

関連情報