一、netstat命令
在Linux使用过程中,需要了解当前系统开放了哪些端口,并且要查看开放这些端口的具体进程和用户,可以通过netstat命令进行简单查询
netstat命令各个参数说明如下:
-a 或–all 显示所有连线中的Socket。
-A <网络类型>或–<网络类型> 列出该网络类型连线中的相关地址。
-c 或–continuous 持续列出网络状态。
-C 或–cache 显示路由器配置的快取信息。
-e 或–extend 显示网络其他相关信息。
-F 或 –fib 显示FIB。
-g 或–groups 显示多重广播功能群组组员名单。
-h 或–help 在线帮助。
-i 或–interfaces 显示网络界面信息表单。
-l 或–listening 显示监控中的服务器的Socket。
-M 或–masquerade 显示伪装的网络连线。
-n 或–numeric 直接使用IP地址,而不通过域名服务器。
-N 或–netlink或–symbolic 显示网络硬件外围设备的符号连接名称。
-o 或–timers 显示计时器。
-p 或–programs 显示正在使用Socket的程序识别码和程序名称。
-r 或–route 显示 Routing Table。
-s 或–statistice 显示网络工作信息统计表。
-t 或–tcp 显示TCP 传输协议的连线状况。
-u或–udp 显示UDP传输协议的连线状况。
-v或–verbose 显示指令执行过程。
-V 或–version 显示版本信息。
-w或–raw 显示RAW传输协议的连线状况。
-x或–unix 此参数的效果和指定”-A unix”参数相同。
–ip或–inet 此参数的效果和指定”-A inet”参数相同。
常用的几个查询命令:
1.查看当前所有tcp端口
(bert) [dev@new bert]$ netstat -ntlp
(No info could be read for "-p": geteuid()=1001 but you should be root.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:8219 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:9500 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:8700 0.0.0.0:* LISTEN -
1、0.0.0.0代表本机上可用的任意地址。 比如0.0.0.0:135 表示本机上所有地址的135端口,这样多ip计算机就不用重复显示了。
2、TCP 0.0.0.0:80表示在所有的可用接口上监听TCP80端口
3、0.0.0.0为默认路由,即要到达不再路由表里面的网段的包都走0.0.0.0这条规则
4、127.0.0.1表示你本机ip地址的意思。
5、[::]:21表示ipv6的21号端口的意思。
6、UDP的外部链接都是*:*的原因:*:*是网址的通配符,就是192.168.15.12,这个类型的整体描述。
2.查看所有80端口使用情况
(bert) [dev@new bert]$ netstat -ntlp | grep 9002
(No info could be read for "-p": geteuid()=1001 but you should be root.)
tcp 0 0 0.0.0.0:9002 0.0.0.0:* LISTEN -
(bert) [dev@new bert]$
3.查看本机路由表
(bert) [dev@new bert]$ netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.11.1.254 0.0.0.0 UG 0 0 0 em1
10.0.0.0 10.11.1.254 255.0.0.0 UG 0 0 0 em1
10.9.2.0 10.11.3.254 255.255.255.0 UG 0 0 0 em2
10.11.0.0 0.0.0.0 255.255.254.0 U 0 0 0 em1
10.11.2.0 0.0.0.0 255.255.254.0 U 0 0 0 em2
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 em1
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 em2
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.0.0 10.11.1.254 255.255.0.0 UG 0 0 0 em1
二、top命令
经常用来监控linux的系统状况,比如cpu、内存的使用。
(bert) [dev@new bert]$ top
top - 10:05:01 up 1004 days, 20:46, 1 user, load average: 0.16, 0.80, 1.36
Tasks: 456 total, 1 running, 455 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.7 us, 0.2 sy, 0.0 ni, 98.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 13174361+total, 30443656 free, 18688612 used, 82611344 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 11187157+avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
84984 root 20 0 3193376 103232 6244 S 57.5 0.1 142:34.87 pctrserver
37150 prometh+ 20 0 124940 24140 5764 S 4.3 0.0 5151:37 node_exporter
21135 polkitd 20 0 642872 9940 3384 S 0.3 0.0 55:43.52 polkitd
113628 root 20 0 3832964 21404 12084 S 0.3 0.0 46:08.88 containerd
1 root 20 0 44068 4196 2240 S 0.0 0.0 245:40.86 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:21.89 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 22:07.58 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
第一行:
10:05:01 — 当前系统时间
up 1004 days, 20:46 — 系统已经运行了1004天20小时46分钟(在这期间没有重启过)
1 users — 当前有1个用户登录系统
load average: 0.16, 0.80, 1.36 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。
第二行:
Tasks — 任务(进程),系统现在共有456个进程,其中处于运行中的有1个,455个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。
第三行:cpu状态
1.7 us — 用户空间占用CPU的百分比。
0.2 sy — 内核空间占用CPU的百分比。
0.0 ni — 改变过优先级的进程占用CPU的百分比
98.0 id — 空闲CPU百分比
0.0 wa — IO等待占用CPU的百分比
0.0 hi — 硬中断(Hardware IRQ)占用CPU的百分比
0.0 si — 软中断(Software Interrupts)占用CPU的百分比
在这里CPU的使用比率和windows概念不同,如果你不理解用户空间和内核空间,需要充充电了。
第四行:内存状态(KiB)
13174361+total — 物理内存总量
18688612 used — 使用中的内存总量
30443656 free — 空闲内存总量
82611344 buff/cache — 缓存的内存量
第五行:swap交换分区(KiB)
0 total — 交换区总量(4G)
0 used — 使用的交换区总量(0M)
0free — 空闲交换区总量(4G)
11187157+avail Mem — 缓冲的交换区总量
第六行是空行
第七行以下:各进程(任务)的状态监控
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)
多核CPU监控
在top基本视图中,按键盘数字“1”,可监控每个逻辑CPU的状况:
(bert) [dev@new bert]$ top
top - 10:14:59 up 1004 days, 20:56, 1 user, load average: 0.93, 1.00, 1.13
Tasks: 453 total, 1 running, 452 sleeping, 0 stopped, 0 zombie
%Cpu0 : 2.3 us, 0.0 sy, 0.0 ni, 97.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 5.3 us, 0.3 sy, 0.0 ni, 94.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 : 1.7 us, 0.0 sy, 0.0 ni, 98.0 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 : 2.6 us, 0.3 sy, 0.0 ni, 97.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu4 : 2.3 us, 0.3 sy, 0.0 ni, 97.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
三、查看最消耗CPU、内存的进程
1.CPU占用最多的前10个进程:
ps auxw|head -1;ps auxw|sort -rn -k3|head -10
2.内存消耗最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k4|head -10
3.虚拟内存使用最多的前10个进程
ps auxw|head -1;ps auxw|sort -rn -k5|head -10
看看几个参数含义
%MEM 进程的内存占用率
MAJFL is the major page fault count,
VSZ 进程所使用的虚存的大小
RSS 进程使用的驻留集大小或者是实际内存的大小(RSS is the "resident set size" meaning physical memory used)
TTY 与进程关联的终端(tty)
串行端口终端(/dev/ttySn)
伪终端(/dev/pty/)
控制终端(/dev/tty)
控制台终端(/dev/ttyn, /dev/console)
虚拟终端(/dev/pts/n)
STAT 检查的状态:进程状态使用字符表示的,如R(running正在运行或准备运行)、S(sleeping睡眠)、I(idle空闲)、Z (僵死)、D(不可中断的睡眠,通常是I/O)、P(等待交换页)、W(换出,表示当前页面不在内存)、N(低优先级任务)T(terminate终止)、W has no resident pages
D 不可中断 Uninterruptible sleep (usually IO)
R 正在运行,或在队列中的进程
S 处于休眠状态
T 停止或被追踪
Z 僵尸进程
W 进入内存交换(从内核2.6开始无效)
X 死掉的进程
< 高优先级
N 低优先级
L 有些页被锁进内存
s 包含子进程
+ 位于后台的进程组;
l 多线程,克隆线程 multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
其他命令:
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq
# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l
查看CPU信息(型号)
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
cpu占用超过100%
假设有n个 core,cpu最大就是n*100%。
查看一下CPU信息:在命令行里输入:cat /proc/cpuinfo
机器12个core,那么cpu占用率1068%<1200%,这就解释的通了。
参考: