Linux用netstat查看服务、监听端口、top查看cpu(占用超过100%)、内存的使用,查看最消耗CPU、内存的进程

一、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) 

 其他命令:

Linux查看物理CPU个数、核数、逻辑CPU个数

# 总核数 = 物理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%,这就解释的通了。

参考:

1.https://blog.csdn.net/wade3015/article/details/90779669

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值