一.linux后台管理命令(nohup命令)

&符只是帮助进程在当前的ssh会话中,在后台运行,如果ssh会话断开,进程依然会丢失

nohup命令是真正让进程在后台运行、即使会话断开进程也不丢失,它也是要和&符结合使用的,实现命令后台执行

语法:nohup    你要执行的命令    &

[root@localhost ~]# nohup ping baidu.com &
[1] 83874
[root@localhost ~]# nohup: ignoring input and appending output to ‘nohup.out’

终止这个进程

[root@localhost ~]# jobs -l
[1]+ 84289 Running                 nohup ping baidu.com &
[root@localhost ~]# kill 84289
[root@localhost ~]# jobs
[1]+  Terminated              nohup ping baidu.com

生产环境下的用法

关闭窗口,程序也不会中断,只有通过ps命令可以看到该进程,还在运行了

[root@localhost ~]# nohup ping baidu.com > /tmp/nohup_ping.log 2>&1 &
[1] 84839
[root@localhost ~]# jobs
[1]+  Running                 nohup ping baidu.com > /tmp/nohup_ping.log 2>&1 &
[root@localhost ~]# tail -f /tmp/nohup_ping.log 
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=129 ttl=128 time=33.3 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=130 ttl=128 time=31.4 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=131 ttl=128 time=32.0 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=132 ttl=128 time=34.2 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=133 ttl=128 time=32.7 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=134 ttl=128 time=33.9 ms

二.理解Linux的数据流

执行linux命令时,linux默认为用户进程提供了3种数据流

  • stdin
  • 标准输入,代号0
  • 一般是键盘输入数据
  • 比如cat命令等待用户输入
  • stdout
  • 标准输出,代号1
  • 程序执行结果,输出到终端
  • stderr
  • 标准错误输出,代号2
  • 程序执行结果,输出到终端

1.标准输入

cat 接收键盘的输入数据,然后打印到终端,直到ctrl +d 结束输入

[root@localhost ~]# cat
你好
你好
我是一原
我是一原

2.标准输出

[root@localhost ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

3.标准错误输出

[root@localhost ~]# cat /etc/passwddddddd
cat: /etc/passwddddddd: No such file or directory

三.数据重定向

数据流的输入、输出,都是直接显示在屏幕上,你貌似做不了更多处理,不够强大,因此linux系统提供了数据重定向符号,让你能够对数据再次做处理

  • 使用 “ > ”符号,将标准输出重定向到文件中。形式为:命令>文件名
  • 使用“ >> ”符号,将标准输出结果追加到指定文件后面。形式为:命令>>文件名
  • 使用“ 2> ”符号,将标准错误输出重定向到文件中。形式为:命令 2> 文件名
  • 使用“ 2>> ”符号,将标准错误输出追加到指定文件后面。形式为:命令 2>>文件名
  • 使用“ 2>&1 ”符号或“ &> ”符号,将把标准错误输出stderr重定向到标准输出stdout
  • 使用“ >/dev/null ”符号,将命令执行结果重定向到空设备中,也就是不显示任何信息

1.标准输入重定向

输入重定向是指把命令(或可执行程序)的标准输入,重定向到指定的文件中,也就是说,输入可以不来自键盘,而来自一个指定的文件,原本是来自于终端的键盘输入,改为了,可以是来自于文件的输入

[root@localhost ~]# cat < yiyuan.log
你好
我是一原

2.标准输出重定向

[root@localhost ~]# echo '你好 我是一原' > yiyuan.log
[root@localhost ~]# echo '你好 我是一原' >> yiyuan.log
[root@localhost ~]# cat -n yiyuan.log
     1	你好 我是一原
     2	你好 我是一原

3.错误重定向追加

[root@localhost ~]# ecccccho '你好 我是一原' 2 >> yiyuan.log

4.将stderr重定向到stdout,就可以防止程序运行出错,导致程序异常

对于stderr的处理,建议用2>&1,用的人最多

理解stderr,转为stdout的过程

写法一:

[root@localhost ~]# echhhho '你好 我是一原' >> yiyuan.log  2>&1
[root@localhost ~]# cat yiyuan.log
你好 我是一原
你好 我是一原
-bash: echhhho: command not found

写法二:

[root@localhost ~]# echhho '你好 我是一原' &>> yiyuan.log
[root@localhost ~]# cat yiyuan.log
你好 我是一原
你好 我是一原
-bash: echhhho: command not found
-bash: echhho: command not found

黑洞文件同样遵循stdout、stderr的语法

[root@localhost ~]# echo '你好 我是一原' &>> /dev/null
[root@localhost ~]# eeeeeeeecho '你好 我是一原' &>> /dev/null

四.机器负载查看

系统负载指的是在单位时间内,系统分配给CPU处理的进程数量,必然是数量越多,负载值越高,机器的压力越大,load average表示平均负载

通过命令行运行 Linux 系统的 uptime 命令,会输出以下信息:

  1. 系统的当前时间
  2. 系统的总正常运行时间
  3. 当前正在运行系统的活动用户
  4. 过去 1、5 和 15 分钟内可用的系统负载的平均值

如何理解uptime看到的负载

分别是1、5、15分钟内的平均负载情况,表示是1~15分钟内CPU的负载变化情况

  1. 三个值如果差不多,表示系统很稳定的运行中,15分钟以内,CPU都没有很忙
  2. 如果1分钟内的值,远大于15分钟的值,表示机器在1分钟内压力在直线上升
  3. 如果1分钟内的值,小于15分钟的值,表示系统的负载正在下降中
[root@localhost ~]# uptime
 18:21:43 up 1 day, 23:27,  3 users,  load average: 0.01, 0.02, 0.05

最理想化的状态是每个CPU都在运行着进程,充分让cpu工作起来,效率最大化,你得先看看你机器上有几个CPU(几个核,就是有几个cpu可以工作)

[root@localhost ~]# lscpu |grep -i '^cpu(s)'
CPU(s):                2

通过cpu的文件,确定是几颗CPU

[root@localhost ~]# cat /proc/cpuinfo |grep 'core id' | sort |uniq|wc -l
1

五.Stress负载压力测试

cpu的压力,来自于高频的计算任务,比如数值计算等,我们可以用bash程序,python程序,以及各种编程语言,来实现复杂的高频率计算

这里我们用几个工具:

stress       stress是一个linux的压力测试工具,专门用于对设备的CPU、IO、内存、负载、磁盘等进行压测。

mpstat     多核CPU性能分析

pidstat      实时查看cpu、内存、io等指标

1.安装stress工具

[root@localhost ~]# yum install -y stress

2.使用stress命令,给机器进行压力测试,这个命令会让你的机器,cpu达到100%,以此实现最高压的环境

--cpu 4 让4个cpu同时工作

[root@localhost ~]# stress --cpu 1  --timeout 600
stress: info: [104589] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd

系统资源管理_标准输出

六.Free查看内存使用情况

free命令

free 命令主要是用来查看内存和 swap 分区的使用情况的,其中:

  • total:是指物理内存总大小,信息来自于/proc/meminfo
  • used:是指已经使用的内存,userd=total-free-buffers-cache
  • free:是指空闲的;free = total - used - buff - cache
  • shared:是指共享的内存;用于tmpfs系统
  • buff/cache
  • buffers:缓冲区,写入缓冲,用于内存和磁盘之间的数据写入缓冲,存放内存需要写入到磁盘的数据
  • cached:缓存区,读取缓存,加快CPU和内存数据交换,存放内存已经读取完毕的数据
  • 第2行数据是Swap交换分区,也就是我们通常所说的虚拟内存(硬件交换分区)
  • 防止内存用完导致系统崩溃,临时拿硬盘的一些空间当做内存使
[root@localhost ~]# free
              total        used        free      shared  buff/cache   available
Mem:        3861288      319408     3156064       28268      385816     3281988
Swap:       2097148           0     2097148
[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           3770         311        3082          27         376        3205
Swap:          2047           0        2047
[root@localhost ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           3.7G        311M        3.0G         27M        376M        3.1G
Swap:          2.0G          0B        2.0G

七.理解buff和cache

  • buffer,==缓冲区==,buffers是给==写入数据==加速的
  • Cache,==缓存==,Cached是给==读取数据==时加速的

1.cache是指把读取磁盘而来的数据保存在内存中,再次读取,下一次不用读取硬盘,而直接从内存中读取,加速数据读取过程

cache解决的时间问题,提高数据读取速度,cache利用的是内存极快的速度特性,读写速度是磁盘的很多倍。

2.buffer是指写入数据时,把分散的写入操作保存到内存,达到一定程度集中写入硬盘,减少磁盘碎片,以及反复的寻道时间,加速数据写入

buffer解决的是空间问题,给数据写入提供一个暂存空间,磁盘对碎片化的数据处理,是很低效的

八.df 查看磁盘信息

命令:df

作用:查看磁盘的空间(disk free)

语法: df [-h]

选项:-h表示可读性较高的形式展示大小

系统资源管理_标准输出_02

九.磁盘io监控(iotop)

iotop命令 是一个用来监视磁盘I/O使用状况的top类工具

iotop具有与top相似的UI,其中包括PID、用户、I/O、进程等相关信息

yum install iotop -y

显示默认信息

iotop

2.以kb单位显示io进程

iotop -k

系统资源管理_数据_03

十.系统资源管理

1.netstat命令

network status,网络状态命令

语法:netstat -tnlp

选项:

-t:表示只列出tcp 协议的连接;(你可以看到你的nginx的运行)

-n:表示将地址从字母组合转化成ip 地址,将协议转化成端口号来显示;(netsta默认会看到机器的主机名 -n 直接显示ip)

-l :表示过滤出"state(状态)"列中其值为LISTEN(监听)的连接;(你的nginx是否监听了0.0.0.0:80)确认端口在运行中,等待客户来访问

-p:表示显示发起连接的进程pid 和进程名称; (显示使用该端口的进程的id号)

-u  :查看udp连接  (ntpd服务)

[root@localhost ~]# netstat -tunlp |grep nginx 
[root@localhost ~]# netstat -tunlp | grep ntp

2.ss命令

用法和netstat一模一样

在高并发场景下,也就是机器的链接数特别多的时候,使用ss性能比netstat更高一些

[root@localhost ~]# ss -tunlp |grep nginx

3.iftop

用起来和top命令很像,动态的掌握服务器的流量情况 ,能够看到你机器,有多少流量进来,有多少流量出去

[root@localhost ~]# yum -y install iftop

系统资源管理_重定向_04