Linux核心的進程:

Linux核心的進程:

我想知道我目前的規則消耗了CPU多少。memoryiptables

我嘗試查看pshtop,但即使顯示了內核線程,也沒有看到任何與iptables.

我正在使用conntrack具有以下特定於模組的設定的模組:xt_recent.ip_pkt_list_tot=1 xt_recent.ip_list_tot=4096。我認為4096是相當高的。然後,在我的 iptables 配置中,我使用兩種阻止清單:BLACKLISTPORTSCAN

-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 核心進程正在做「工作」(處理系統呼叫)。您的進程清單中可以有多個:kworker/0:1是第一個 CPU 核心上的進程,kworker/1:1第二個 CPU 核心上的一個,等等。執行緒核心空間上的行程。

父進程:進程 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


連結:1,2,3,4,5,6

相關內容