Linux日常运维管理技巧(1)

1.系统状态查看

1.1 使用W查看系统负载

查询逻辑cpu核数 cat /proc/cpuinfo 

查看操作系统全程 uname -a

查看操作系统版本lsb_release

uptime类似于w命令,但是显示只有一行

1.2 VMSTAT命令

vmstate 可以查看到CPU 内存 虚拟分区 磁盘 系统进程相关的东西, 此命令我们一般以vmstat 1 来用,意为每一秒钟动态显示(vmstat 1 5指每一秒钟动一次显示五次)--红框内为关注的点

r-run: 系统中的进程

b-block: 进程被CPU以外的资源阻断,处于等待状态,网络,硬盘

swpd: 如果此数字持续变化,说明交换分区和内存在频繁交换数据,意味着内存不够了同时si,so也会变化

si: 有多少kb的数据从swap进入到内存中

so: 有多少kb的数据从从内存中出来

bi:从磁盘进入到内存中去,从磁盘里读

bo: 写入磁盘里去数据量的大小,代表磁盘度盘读写速率  

如果bi,bo数值大意味着读写量很大 (上5000的时候就要注意)

us:表示用户级别,在系统上跑了一些网站服务,这些就会占用一些资源,就会体现在us上,这个数字是百分比,不会超过百分百。简单来讲就是用户开的服务占用cpu的百分比

us+sy+id+wa = 100%

wa-wait: 等待cpu的百分比,有多少个进程在等待cpu

1.3 top命令

虽然通过vmstat能查出系统哪个过载,但是我们可以进一步通过top查看是哪个进程过载

top命令3秒钟显示一次

zombie是指主进程已经终止了,意外的留下了一些子进程还在,还有进程号(PID)

st表示被偷走的cpu百分比,如果做了虚拟化 子机可能他偷走一部分百分比

如果cpu的us通常在60%以上,对cpu是没好处的,如下

下图为物理内存和交换分区的情况,通常我们会比较关注物理内存

res是指物理内存大小,单位指字节

默认中是以cpu使用百分比从上到下排序,如果要以内存使用排序按键“M”换回cpu排序按键“P”,字母q退出top

top -c 可以看到具体进程全程的路径

top -bn1 静态显示top, 一次性全部列出来,写脚本用

1.4 sar命令

监控系统状态

sar每十分钟会把系统状态过滤一遍 保存在 /var/log/sa中(此目录最多保留一个月)

sar -n DEV 1 10 (显示网卡流量,每隔一秒钟显示一次,显示十次)

rxpck/txpck 接收和发送的数据包(当接收的数据包过万时,便不正常了)

rxkB/txkB 接收和发送的数据量

sar -n DEV -f /var/log/sa/sa22 查看历史网卡数据(-f参数指查看历史)---如果要cat此命令换为sar -n 

iostat同样能看磁盘负载

DEV -f /var/log/sa/sar22

1.5 nload命令

nolad -m 会显示出动态的网卡显示

1.6 监控io性能

iostat -x

iotop 可以用来查看具体哪个进程使用io比较大, 也是动态显示

1.7 free命令

在free命令下指定显示的格式

看上图会发现total并不等于used+free,因为linux系统会预留出一部分给buff和cache

buffer缓冲

cache缓存 

buffer与cache在Linux系统内存中是被预先分配的

buffer与cache的区别:数据流向不同

磁盘(数据) --》 内存(起缓存作用cache) --》 cpu

cpu (数据) --》 内存(起缓冲作用buffer) --》 磁盘

available是指free+还未用完的buffer/cache

1.8 ps命令

ps aux 可以列出系统的全部进程

ps aux |grep nginx 常用命令! 检查某进程是否运行

ps -elf 类似于ps aux

根据pid可以终止进程 kill 13(pid), 在终止前可以先查看此进程是哪里启动的 ls /proc/pid

注: vmstat命令虽然实时更新,当把此命令切换到后台时stat是s而不是r因为占用cpu很少

<高级优先进程,指cpu会可此进程先来

1.9 netstat查看网络状态

netstat -lnp 可以查询出监听的端口

netstat -an 可以查询tcp-ip的状态,可以查询所有连接状态

timewait状态是指客户端和服务端两个机器相互通信,通信后他们的链接还没有断开,处于等待的状态,等待下一次进行链接传输数据

可以通过一下命令列出数字

如果established数字很大,说明系统很忙

ss -an 类似于netstat命令 (缺点在于他不会像netstat一样显示进程的名字)

eg ss-an |listen

1.10 Linux下抓包-tcpdump

tcpdump -nn -i ens33命令来看数据的流向(第一个n是表示数字,如果输入一个n就会显示主机名)

同样也可以用命令tcpdump -nn -c 100 -w 1.cap 指定长度,个数(下例只抓10个数据包)写入1.cap中

tshark可以抓到网络的80端口外部访问情况(类似于web的访问日志)

2. linux网络相关

ifconfig 在网卡宕掉的时候ens33是不会显示的,这时候就要用ens33

ifup ens33 /ifdown ens33 把网卡踢掉/添加回来(当单独针对某网卡时,重启指定网卡时候,可以用ifdown/ifup  ----比较安全的做法是 ifdown ens33 && ifup ens33以避免down时没有网络)

设定虚拟网卡

cd /etc/sysconfig/network-scripts/

cp ifcfg-ens33 ifconfig-ness33\:1

vi ifconfig-ness33\:1 (更改name,device以及ip dns1和网管可以删掉)

ifdown && ifup nes33

ifconfig 就会发现多一个网卡

查看网卡是否连接 mii-tool ens33

2.1 进程和线程

1、首先是定义

进程:是执行中一段程序,即一旦程序被载入到内存中并准备执行,它就是一个进程。进程是表示资源分配的的基本概念,又是调度运行的基本单位,是系统中的并发执行的单位。

线程:单个进程中执行中每个任务就是一个线程。线程是进程中执行运算的最小单位。

2、一个线程只能属于一个进程,但是一个进程可以拥有多个线程。多线程处理就是允许一个进程中在同一时刻执行多个任务。

3、线程是一种轻量级的进程,与进程相比,线程给操作系统带来侧创建、维护、和管理的负担要轻,意味着线程的代价或开销比较小。

4、线程没有地址空间,线程包含在进程的地址空间中。线程上下文只包含一个堆栈、一个寄存器、一个优先权,线程文本包含在他的进程 的文本片段中,进程拥有的所有资源都属于线程。所有的线程共享进程的内存和资源。 同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有自己的栈段, 寄存器的内容,栈段又叫运行时段,用来存放所有局部变量和临时变量。

5、父和子进程使用进程间通信机制,同一进程的线程通过读取和写入数据到进程变量来通信。

6、进程内的任何线程都被看做是同位体,且处于相同的级别。不管是哪个线程创建了哪一个线程,进程内的任何线程都可以销毁、挂起、恢复和更改其它线程的优先权。线程也要对进程施加控制,进程中任何线程都可以通过销毁主线程来销毁进程,销毁主线程将导致该进程的销毁,对主线程的修改可能影响所有的线程。

7、子进程不对任何其他子进程施加控制,进程的线程可以对同一进程的其它线程施加控制。子进程不能对父进程施加控制,进程中所有线程都可以对主线程施加控制。

相同点:

进程和线程都有ID/寄存器组、状态和优先权、信息块,创建后都可更改自己的属性,都可与父进程共享资源、都不鞥直接访问其他无关进程或线程的资源。

Excerpted from https://blog.csdn.net/qq_33573235/article/details/76588639

猜你喜欢

转载自blog.csdn.net/nongfuchui/article/details/84113178