<返回更多

Linux 服务器系统最全性能优化实战

2020-07-30    
加入收藏

1、基础命令和工具

grep 搜索字符

grep命令用于在文件中执行关键词搜索,并显示匹配的效果。

Linux 服务器系统最全性能优化实战

 

//在指定文件查找,查找 login 关键字
grep login ImUser.cpp 
//多个文件中搜索

grep login ImUser.cpp MsgConn.cpp
//在多个文件搜索的时候,可以使用通配符。在以 cpp 结尾的文件中,搜索包含 login 的行

grep login *.cpp
//递归搜索所有文件,搜索msg_server目录下所有文件,打印出login行
grep login -r msg_server/
//反向查找,查找文件中,不包含login的行
grep -v login ImUser.cpp 
//找出文件中包含 login 的行,并打印出行号
grep -n login ImUser.cpp 
//找出文件中包含 login 的行,打印出行号,并显示前后 3 行
grep -C 3 -n login ImUser.cpp 
//找出文件中包含 login 的行,打印出行号,并显示前后 3 行,并忽略大小写
grep -C  3  -i  -n  login  ImUser.cpp

find 查找文件

通过文件名查找文件的所在位置,文件名查找支持模糊匹配。

find [指定查找目录] [查找规则] [查找完后执行的 action]

常用的操作:

find . -name FILE_NAME
// 忽略文件名称大小写
find . -iname FILE_NAME
//查找/etc/下名称中带有 passwd 的文件,查找一层
find /etc -maxdepth 1 -name passwd
//查找/mnt 文件大小近似 20k 的文件
find /mnt -size 20K
//查找/mnt 文件大小大于 20k 的文件
find /mnt -size +20K
//查找/mnt 文件大小小于 20k 的文件
find /mnt -size -20K
//查找/etc/下名称中带有*.conf 的文件,且只查找第二层
find /etc -maxdepth 2 -mindepth 2 -name *.conf
//按 type 查找/mnt 中目录
find /mnt -type d
//按 type 查找/mnt 中文件
find /mnt -type f
//查找/mnt 中十分钟左右修改的
find /mnt -cmin 10 
//查找/mnt 中十分钟以上修改的
find /mnt -cmin +10 
//查找/mnt 中十分钟以内修改的
find /mnt -cmin -10
//查找/mnt 中十天左右修改
find /mnt -ctime 10 
//查找/mnt 中十天以上修改
find /mnt -ctime +10 
//查找/mnt 中十天以内修改
find /mnt -ctime -10 

 

wc 命令

wc 命令用于计算字数。可以计算文件的 Byte 数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则 wc 指令会从标准输入设备读取数据。

语法

wc [-clw][--help][--version][文件...]

参数:

-c 或--bytes 或--chars 只显示 Bytes 数。

-l 或--lines 只显示行数。

-w 或--words 只显示字数。

--help 在线帮助。

--version 显示版本信息。

wc testfile # testfile 文件的统计信息 
7 92 607 testfile # testfile 文件的行数为 7、单词数 92、字节数 607

uptime 机器启动时间+负载

查看机器的启动时间、登录用户、平均负载等情况,通常用于在线上应急或者技术攻关中,确定操作系统的重启时间。

系统负载如下图:

Linux 服务器系统最全性能优化实战

 

系统的平均负载是指在特定的时间间隔内队列中运行的平均进程数。如果一个进程满足条件,就会位于运行队列中。

(1)没有在等待 I/O 操作的结果。

(2)没有主动进入等待状态,也就是没有调用’wait'相关的系统 API

(3)没有被停止(例如:等待终止)。

如果每个 CPU 内核的当前活动进程数不大于 3 的话,那么系统的性能还算可以支持。如果每个 CPU 内核的任务数大于 5,那么这台机器的性能有严重问题。如果你的 linux 主机是 1 个双核 CPU 的话,当 Load Average 为 6 的时候说明机器已经被充分使用了。

负载说明

以下是针对单核情况说明:

load<1:没有等待。

load==1:系统已无额外的资源跑更多的进程了。

load>1:进程都堵着等待资源。

注意:

load < 0.7 :系统很闲,要考虑多部署一些服务。

0.7 < load < 1 :系统状态不错。

load == 1 时:系统马上要超负载了。

load > 5:系统已经非常繁忙。

不同 load 值说明的问题:

(1)1 分钟 load >5,5 分钟 load <3,15 分钟 load <1。

短期内繁忙,中长期空闲,初步判断是一个抖动或者是拥塞前兆

(2)1 分钟 load >5,5 分钟 load >3,15 分钟 load <1

短期内繁忙,中期内紧张,很可能是一个拥塞的开始

(3)1 分钟 load >5,5 分钟 load >5,15 分钟 load >5

短中长期都繁忙,系统正在拥塞

(4)1 分钟 load <1,5 分钟 Load>3,15 分钟 load >5

短期内空闲,中长期繁忙,不用紧张,系统拥塞正在好转。

查看 cpu 信息:

cat /proc/cpuinfo

直接获取 cpu 核数:

grep 'model name' /proc/cpuinfo | wc -l

ulimit 用户资源

可以根据硬件资源的具体情况设置各个用户的最大进程数和打开的最大文件句柄数。可以用 ulimit -a 来显示当前的各种系统对用户使用资源的限制:

Linux 服务器系统最全性能优化实战

 

设置用户的最大进程数:

ulimit -u 1024

设置用户可以打开的最大文件句柄数:

ulimit -n 65530

curl http

由于当前的线上服务较多地使用了 RESTful 风格的 API,所以集成测试就需要进行HTTP 调用,查看返回的结果是否符合预期,curl 命令当然是首选的测试方法。使用方式如下:

//打印请求响应头信息

curl -i "http://www.sina.com"

// 仅返回 http 头

 

curl -I "http://www.sina.com"

// 打印更多的调试信息

 

curl -v "http://www.sina.com"

// 打印更多的调试信息

 

curl -verbose "http://www.sina.com"

// 使用 post 方法提交 http 请求

curl -d 'abc=def' "http://www.sina.com"

// 打印 http 响应码

 

curl -sw '%{http_code}' "http://www.sina.com"

scp 远程拷贝

secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。scp 命令是 Linux 系统中功能强大的文件传输命令,可以实现从本地到远程,以及从远程到本地的双向文件传输,用起来非常方便,常用来在线上定位问题时将线卜的一些文件下载到本地进行详查,或者将本地的修改上传到服务器上。

使用方式:

sudo apt-get install openssh-server

//下载服务器上的文件

scp 用户名@host name://服务器目录

//上传文件

scp 文件 用户名@host name://服务器目录

//下载服务器上的文件到本地

scp -r 用户名@host name://服务器目录 .

//上传本地test整个目录到另外服务器地址

scp -r test 用户名@host name://服务器目录 另外服务器地址

dos2unix 和 unix2dos

用于转换 windows 和 UNIX 的换行符,通常在 Windows 系统 h 开发的脚本和配置,UNIX 系统下都需要转换。

使用方式:

dos2unix test.txt

unix2dos test.txt

//转换整个目录

find . -type f -exec dos2unix {} ;

//显示当前目录下所有的文件

find ./ -type f

sed 字符替换

命令格式 1:sed 's/原字符串/新字符串/' 文件

命令格式 2:sed 's/原字符串/新字符串/g' 文件

两种命令格式的区别在于是否有个“g”。没有“g”表示只替换第一个匹配到的字符串,有“g”表示替换所有能匹配到的字符串,“g”可以认为是“global”(全局的)的缩写,没有“全局的”结尾就不要替换全部。

查看活动进程的命令

ps 用一于显示系统内的所有进程。

-l 或 l 采用详细的格式来显示进程状况

常用方式:ps -elf 和 ps -ef

根据进程的名字或者其他信息,通过 grep 命令找到目标进程,也可以看到进程启动脚本的全路径。

(1)检测是否有活动进程:

sudo ps -ef |grep "Nginx: master process" |grep -v grep

(2)检测有几个同样的活动进程

sudo ps -ef |grep "nginx: master process" |grep -v grep |wc -l

top

op 命令用于查看活动进程的 CPU 和内存信息,能够实时显示系统中各个进程的资源占用情况,可以按照 CPU、内存的使用情况和执行时间对进程进行排序。

Linux 服务器系统最全性能优化实战

 

从输出可以看到整体的 CPU 占用率、CPU 负载,以及进程占用 CPU 和内存等资源的情况。

用以下所示的 top 命令的快捷键对输出的显示信息进行转换。

t:切换报示进程和 CPU 状态信息。

n:切换显示内存信息。

r:重新设置一个进程的优先级。系统提示用户输人需要改变的进程 PID 及需要设置的进程优先级,然后输入个正数值使优先级降低,反之则可以使该进程拥有更高的优先级,即是在原有基础上进行相加,默认优先级的值是 100。

k:终止一个进程,系统将提示用户输入需要终止的进程 PID o

s:改变刷新的时间间隔。

u:查看指定用户的进程。

top 命令查找 cpu 占用率最高的程序,找到对应的 PID。

top -Hp pid ,查看具体进程下的线程,比如:

Linux 服务器系统最全性能优化实战

 

pidstat 进程资源

pidstat 用于监控全部或指定的进程占用系统资源的情况,包括 CPU、内存、磁盘 I/O、程切换、线程数等数据。

-u:表示查看 cpu 相关的性能指标

• -w:表示查看上下文切换情况

• -t:查看线程相关的信息,默认是进程的;常与-w 结合使用(cpu 的上下文切换包

括进程的切换、线程的切换、中断的切换)

• -d:展示磁盘 I/O 统计数据

• -p:指明进程号

使用方式:pidstat [option] interval [count]

使用范例:pidstat -urd -p 进程号

Linux 服务器系统最全性能优化实战

 


Linux 服务器系统最全性能优化实战

 

CPU 信息

%usr #用户层任务正在使用的 CPU 百分比(with or without nice

priority ,NOT include time spent running a virtual processor)

• %system #系统层正在执行的任务的 CPU 使用百分比

• %guest #运行虚拟机的 CPU 占用百分比

• %CPU #所有的使用的 CPU 的时间百分比

• CPU #处理器数量

• Command #命令

内存信息

PID #进程号

• minflt/s #每秒次缺页错误次数(minor page faults),次缺页错误次数,即虚拟内存地址映射成物理内存地址产生的 page fault 次数。

• majflt/s #每秒主缺页错误次数(major page faults),当虚拟内存地址映射成物理内存地址时,相应的 page 在 swap 中,这样的 page fault 为 major page fault,一般在内存使用紧张时产生。

• VSZ #该进程使用的虚拟内存(以 kB 为单位)

• RSS #该进程使用的物理内存(以 kB 为单位)

• %MEM #当前任务使用的有效内存的百分比

• Command #任务的命令名

磁盘 I/O

• PID #进程号

• kB_rd/s #每秒此进程从磁盘读取的千字节数

• kB_wr/s #此进程已经或者将要写入磁盘的每秒千字节数

• kB_ccwr/s #由任务取消的写入磁盘的千字节数

• Command #命令的名字

上下文切换

//PID 号

PID

//每秒自动上下文切换

cswch/s

//每秒非自愿的上下文切换

nvcswch/s

//命令

Command

free

用于显示系统内存的使用情况,包括总体内存、已经使用的内存。用于显示系统内核使用的缓冲区,包括缓冲和缓存等。

Linux 服务器系统最全性能优化实战

 

1. Mem 行(第二行)是内存的使用情况。

2. Swap 行(第三行)是交换空间的使用情况。

• total 列显示系统总的可用物理内存和交换空间大小。

• used 列显示已经被使用的物理内存和交换空间。

• free 列显示还有多少物理内存和交换空间可用使用。

• shared 列显示被共享使用的物理内存大小。

• buff/cache 列显示被 buffer 和 cache 使用的物理内存大小。

• available 列显示还可以被应用程序使用的物理内存大小。

free 与 available,这到底有什么区别呢?

free 是真正尚未被使用的物理内存数量。至于 available 就比较有意思了,它是从应用程序的角度看到的可用内存数量。Linux 内核为了提升磁盘操作的性能,会消耗一部分内存去缓存磁盘数据,就是我们介绍的 buffer 和 cache。对于内核来说,buffer 和 cache 都属于已经被使用的内存。当应用程序需要内存时,如果没有足够的 free 内存可以用,内核就会从 buffer 和 cache 中回收内存来满足应用程序的请求。所以从应用程序的角度来说,available = free + buffer + cache。

请注意,这只是一个很理想的计算方式,实际中的数据往往有较大的误差。

加上 -h 选项

Linux 服务器系统最全性能优化实战

 

持续观察内存的状况,此时可以使用 -s 选项并指定间隔的秒数:

Linux 服务器系统最全性能优化实战

 

1、Buffer(缓冲区)是系统两端处理速度平衡(从长时间尺度上看)时使用的。它的引入是为了减小短期内突发 I/O 的影响,起到流量整形的作用。比如生产者——消费者问题,他们产生和消耗资源的速度大体接近,加一个 buffer 可以抵消掉资源刚产生/消耗时的突然变化。

2、Cache(缓存)则是解决系统两端处理速度不匹配时的一种策略。CPU 和memory 之间的速度差异越来越大,一般就是利用数据的局部性特征,通过使用存储系统分级(memory hierarchy)的策略来减小这种差异带来的影响。

3、buffer可以减少对磁盘的伤害。存储器访问变得跟 CPU 做计算一样快,cache 就可以消失,但是 buffer 依然存在。比如从网络上下载东西,瞬时速率可能会有较大变化,但从长期来看却是稳定的,这样就能通过引入一个 buffer 使得 OS 接收数据的速率更稳定。

CPU监控命令

vmstat:

此命令显示关于内核线程、虚拟内存、磁盘 I/O 、陷阱和 CPU 占用率的统计信息。

Linux 服务器系统最全性能优化实战

 

buff:IO系统存储的磁盘块文件的元数据的统计信息。

cache:操作系统用来缓存磁盘数据的缓冲区,大小由操作系统调节,在内存紧张时系统会减少cache占用空间,并保证其它进程可用。

cs:参数表示线程环境的切换次数,此数据太大时,表面线程的同步机制有问题。

si和so较大时,说明系统频繁使用交换区,应该查看操作系统的内存是否够用。

bi 和 bo 代表 I/O 活动,根据大小知道磁盘IO的负载情况。

mpstat

实时监控系统 CPU 的一些统计信息,这些信息存放在/proc/stat 文件中,在多核 CPU 系统里,不但能查看所有 CPU 的平均使用信息,还能查看某个特定 CPU 的信息。

使用方式:mpstat [-P {cpu|ALL}] [internal [count]]

当 mpstat 不带参数时,输出为从系统启动以来的平均值。

Linux 服务器系统最全性能优化实战

 

上面有每个CPU核心的占用率、IO等待、软中断、硬中断等。

输出各参数含义:

-P {cpu l ALL} : 表示监控哪个 CPU, cpu 在[0,cpu 个数-1]中取值

internal:相邻的两次采样的间隔时间

count:采样的次数,count 只能和 internal 一起使用

mpstat -P ALL 5 2 命令:表示每 5 秒产生一个报告,总共产生 2 个。

Linux 服务器系统最全性能优化实战

 

输出参数含义

当没有参数时,mpstat 则显示系统启动以后所有信息的平均值。有 interval 时,第一行的信息自系统启动以来的平均信息。从第二行开始,输出为前一个 interval 时间段的平均信息。 输出各参数含义:

Linux 服务器系统最全性能优化实战

 


Linux 服务器系统最全性能优化实战

 

vmstat 和 mpstat 命令的差别:

1.mpstat 可以显示每个处理器的统计,而vmstat显示所有处理器的统计。因此,编写糟糕的应用程序(不使用多线程体系结构)可能会运行在一个多处理器机器上,而不使用所有处理器。从而导致一个 CPU 过载,而其他CPU 却很空闲。通过 mpstat 可以轻松诊断这些类型的问题。

2.vmstat 中所有关于 CPU 的总结都适合 mpstat。较低的%idle数字时,出现了CPU不足,看到较高的%iowait 数字,知道在当前负载下IO子系统出现了某些问题。

4.监控磁盘 I/O 命令

IOStat IO 状态

该命令用于监控CPU占用率,平均负载值及IO读写速度等。

await指的是平均等待时间,一般在10ms左右。

Linux 服务器系统最全性能优化实战

 

cpu 的统计信息,如果是多 cpu 系统,显示的所有 cpu 的平均统计信息。

%user:用户进程消耗 cpu 的比例

• %nice:用户进程优先级调整消耗的 cpu 比例

• %sys:系统内核消耗的 cpu 比例

• %iowait:等待磁盘 io 所消耗的 cpu 比例

• %idle:闲置 cpu 的比例(不包括等待磁盘 I/O)

磁盘的统计参数

tps:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。"一次传输"意思是"一次 I/O 请求"。

多个逻辑请求可能会被合并为"一次 I/O 请求"。"一次传输"请求的大小是未知的。

kB_read/s:每秒从设备(drive expressed)读取的数据量;

kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;

kB_read:读取的总数据量;

kB_wrtn:写入的总数量数据量;这些单位都为 Kilobytes。

显示扩展统计信息

Linux 服务器系统最全性能优化实战

 

rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并。

wrqm/s:每秒对该设备的写请求被合并次数。

r/s: 每秒完成的读次数。

w/s: 每秒完成的写次数。

rkB/s: 每秒读数据量(kB 为单位)。

wkB/s: 每秒写数据量(kB 为单位)

avgrq-sz:平均每次 IO 操作的数据量(扇区数为单位)

avgqu-sz: 平均等待处理的 IO 请求队列长度

await: 平均每次 IO 请求等待时间(包括等待时间和处理时间,毫秒为单位)

svctm: 平均每次 IO 请求的处理时间(毫秒为单位)

%util: 采用周期内用于 IO 操作的时间比率,即 IO 队列非空的时间比率。

常用用法

# kb/s 显示磁盘信息,每 2s 刷新一次

iostat -d -k 2

# kb/s 显示磁盘统计信息及扩展信息,每 1s 刷新 ,刷新 10 次结束

iostat -dkx 1 10

swapon 查看分区

查看交互分区的使用情况

使用方法:swapon -s

Linux 服务器系统最全性能优化实战

 

swap 分区通常被称为交换分区,这是一块特殊的硬盘空间,即当实际内存不够用的时候,操作系统会从内存中取出一部分暂时不用的数据,放在交换分区中,从而为当前运行的程序腾出足够的内存空间。也就是说,当内存不够用时,我们使用 swap 分区来临时顶替。这种“拆东墙,补西墙”的方式应用于几乎所有的操作系统中。一般来讲,swap 分区容量应大于物理内存大小,建议是内存的两倍,但不超过2GB。

df 硬盘

查看文件系统的硬盘挂载点和空间。

使用方式:df -h

Linux 服务器系统最全性能优化实战

 

du 目录文件

du 常用的选项:

-h:以人类可读的方式显示,显示 M 或 K

-a:显示目录占用的磁盘空间大小,还要显示其下目录和文件占用磁盘空间的大小

-s:显示目录占用的磁盘空间大小,不显示其下子目录和文件占用的磁盘空间大小

-c:显示几个目录或文件占用的磁盘空间大小,还要统计它们的总和

du -a 显示目录和目录下子目录和文件占用磁盘空间的大小。直接使用-a 以字节为单位,-ha 如下图以 M 或 K 为结果显示。

du -s 显示当前所在目录大小

du -s -h home 显示 home 目录大小

du -c 显示几个目录或文件占用的磁盘空间大小,还要统计它们的总和

du -lh --max-depth=1 : 查看当前目录下一级子文件和子目录占用的磁盘容量

Linux 服务器系统最全性能优化实战

 

5.查看网络相关的命令

ifconfig 查看和设置网络设备

该命令用于查看机器挂载的网卡情况。

add<地址> 设置网络设备 IPv6 的 IP 地址。

del<地址> 删除网络设备 IPv6 的 IP 地址。

down 关闭指定的网络设备。

<hw<网络设备类型><硬件地址> 设置网络设备的类型与硬件地址。

io_addr<I/O 地址> 设置网络设备的 I/O 地址。

irq<IRQ 地址> 设置网络设备的 IRQ。

media<网络媒介类型> 设置网络设备的媒介类型。

mem_start<内存地址> 设置网络设备在主内存所占用的起始地址。

metric<数目> 指定在计算数据包的转送次数时,所要加上的数目。

mtu<字节> 设置网络设备的 MTU。

netmask<子网掩码> 设置网络设备的子网掩码。

tunnel<地址> 建立 IPv4 与 IPv6 之间的隧道通信地址。

up 启动指定的网络设备。

-broadcast<地址> 将要送往指定地址的数据包当成广播数据包来处理。

-pointopoint<地址> 与指定地址的网络设备建立直接连线,此模式具有保密功能

-promisc 关闭或启动指定网络设备的 promiscuous 模式。

[IP 地址] 指定网络设备的 IP 地址。

[网络设备] 指定网络设备的名称。

显示网络设备信息:ifconfig

Linux 服务器系统最全性能优化实战

 


Linux 服务器系统最全性能优化实战

 

启动关闭指定网卡

# ifconfig eth0 down

# ifconfig eth0 up

配置 IP 地址

# ifconfig eth0 192.168.1.56

//给 eth0 网卡配置 IP 地址

# ifconfig eth0 192.168.1.56 netmask 255.255.255.0

// 给 eth0 网卡配置 IP 地址,并加上子掩码

# ifconfig eth0 192.168.1.56 netmask 255.255.255.0 broadcast 192.168.1.255

// 给 eth0 网卡配置 IP 地址,加上子掩码,加上个广播地址

ping

ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l<前置载入>][-p<范本样式>][-s<数据包大小>][-t<存活数值>][主机名称或 IP 地址]

-d 使用 Socket 的 SO_DEBUG 功能。

-c<完成次数> 设置完成要求回应的次数。

-f 极限检测。

-i<间隔秒数> 指定收发信息的间隔时间。

-I<网络界面> 使用指定的网络接口送出数据包。

-l<前置载入> 设置在送出要求信息之前,先行发出的数据包。

-n 只输出数值

-p<范本样式> 设置填满数据包的范本样式。

-q 不显示指令执行过程,开头和结尾的相关信息除外。

-r 忽略普通的 Routing Table,直接将数据包送到远端主机上。

-R 记录路由过程。

-s<数据包大小> 设置数据包的大小。

-t<存活数值> 设置存活数值 TTL 的大小。

-v 详细显示指令的执行过程。

检测和主机是否连通

ping baidu.com

ping 指定次数

Linux 服务器系统最全性能优化实战

 


Linux 服务器系统最全性能优化实战

 

(1)ping 目标主机的域名和 IP(ping 会自动将域名转换为 IP)

(2)不带包头的包大小和带包头的包大小(参考“-s”参数)

(3)cmp_seq:ping 序列,从 1 开始;如果数字不是按顺序递增也就意味着丢包了 ttl:剩余的 ttl;见 TTL 解释。time: 响应时间,数值越小,连通速度越快。

(4)发出去的包数,返回的包数,丢包率,耗费时间。

(5)最小/最大/平均响应时间和本机硬件耗费时间。

TTL:每经过一个‘路由点‘,就把预先设定的这个 TTL 数值减 1,直到最后 TTL=1 时报文就被扔掉,不向下转发。ping 显示的 TTL 是指:被 ping 主机那里返回的报文,到了你这里,从它自己预设的 TTL 减小到还剩下多少。简单点说,就是经过了多少个路由。

telnet

telnet 是 TCP/IP 协议族的一员,是网络远程登录服务的标准协议,帮助用户在本地计算机上连接远程主机。

使用方式:telnet IP:PORT

与ssh区别

端口区别:telnet 端口是 23 ,ssh端口 是 22。

本质:telnet 是明码传输,ssh 是加密传输。

nc

验证服务器端口有没有开放。

nc 是 NetCat 的简称,在网络调试工具中享有“瑞士军刀”的美誉,此命令功能丰富、短小精悍、简单实用,被设计成一款易用的网络工具,可通过 TCP/LJDP 传输数据。

参数

-l 用于指定 nc 将处于侦听模式。指定该参数,则意味着 nc 被当作 server,侦听并接受连接,而非向其它地址发起连接。

-p 暂未用到(老版本的 nc 可能需要在端口号前加-p 参数,下面测试环境是centos6.6,nc 版本是 nc-1.84,未用到-p 参数)。

-s 指定发送数据的源 IP 地址,适用于多网卡机。

-u 指定 nc 使用 UDP 协议,默认为 TCP。

-v 输出交互或出错信息,新手调试时尤为有用。

-w 超时秒数,后面跟数字。

常用示例

# 开启一个本地 9999 的 TCP 协议端口,由客户端主动发起连接,一旦连接必须由服务端发起关闭

nc -l 9999

# 通过 nc 去访问 129.204.197.215 主机的 11111 端口,确认是否存活;可不加参数

nc -vw 2 129.204.197.215 11111

# 开启一个本地 9999 的 UDP 协议端口,客户端不需要由服务端主动发起关闭

nc -ul 9999

# 通过 129.204.197.215 的 9999TCP 端口发送数据文件

nc 129.204.197.215 9999 < test

# 开启一个本地 9999 的 TCP 端口,用来接收文件内容

nc -l 9999 > zabbix.file

# 测试网速

A 机器操作如下:

nc -l 9999 > /dev/null

//B机器开启数据传输

nc 129.204.197.215 9999 </dev/zero

//A 机器进行网络监控

sar -n DEV 2 100000

在不熟悉公司防火墙设置时,也可以通过监听端口来确定指定的端口是否被封。

mtr 连通性测试

mtr 命令是 Linux 系统中的网络连通性测试工具,也可以用来检测丢包率。

使用方式:mtr baidu.com

Linux 服务器系统最全性能优化实战

 

其中的第 2 列为丢包率,可以用来判断网络中两台机器的连通质量。

模拟丢包:sudo tc qdisc add dev eth0 root netem loss 10%

nslookup

这是一款检测网络中 DNS 服务器能否正确解析域名的工具命令,并且可以输出。

使用方式: nslookup sina.com

Linux 服务器系统最全性能优化实战

 

traceroute

traceroute 可以提供从用户的主机到互联网另一端的主机的路径,虽然每次数据包由同一出发点到达同一目的地的路径可能会不一样,但通常来说大多数情况下路径是相同的。

使用方式:traceroute sina.com

Linux 服务器系统最全性能优化实战

 


Linux 服务器系统最全性能优化实战

 

在输出中记录按序列号从 1 开始,每个记录代表网络一跳,每跳一次表示经过一个网关或者路由;我们看到每行有三个个时间,单位是毫秒,指的是这一跳需要的时间。

sar

sar 是一个多功能的监控工具,使用简单,不需要管理员权限,可以输出每秒的网卡存取速度,适合线上排查问题时使用。

使用方式:

sar -n DEV 1 1

Linux 服务器系统最全性能优化实战

 

从输出中可以看到网卡的读写速度和流量,在应急过程中可以用来判断服务器是否上量。此命令除了可以用于查看网卡的信息,还可以用来收集如下服务的状态信息。

-A:所有报告的总和。

-u:CPU 利用率。

-v:进程、I 节点、文件和锁表状态。

-d:硬盘的使用报告。

-r:没有使用的内存页面和硬盘快。

-g:串口 I/O 的情况。

-b:缓冲区的使用情况。

-a:文件的读写情况。

-c:系统的调用情况。

-R:进程的活动情况。

-y:终端设备的活动情况。

-w:系统的交换活动。

netstat

此命令显示网络连接、端口信息等。

根据进程查找端口

(1)根据进程名查找进程 ID

ps -elf | grep 进程

Linux 服务器系统最全性能优化实战

 

(2)根据进程 ID 查找进程开启的端口

netstat -nap | grep 24614

Linux 服务器系统最全性能优化实战

 


Linux 服务器系统最全性能优化实战

 

根据端口查找进程

(1)根据使用端口

netstat -nap | grep 8080

Linux 服务器系统最全性能优化实战

 

(2)根据进程 ID 查找进程的详细信息

Linux 服务器系统最全性能优化实战

 

iptraf 强大的网络监控

iptraf 是一个实时监控网络流量的交互式的彩色文本屏幕界面。它监控的数据比较全面,可以输出 TCP 连接、网络接口、协议、端口、网络包大小等信息,但是耗费的系统资源比较多,且需要管理员权限。

使用方式:sudo iptraf

在进入主界面之前可以选择不同的选项,在不同的选项下可以查看不同维度的网络信息。

# ubuntu

sudo apt-get install iptraf

tcpdump

tcpdump 是网络状况分析和跟踪工具,是可以用来抓包的实用命令,使用前需要对TCP/IP 有所熟悉,因为过滤使用的信息都是 TCP/IP 格式。

Ubuntu 安装:sudo apt-get install tcpdump

捕获及停止条件

-D 列举所有网卡设备

◼ -i 选择网卡设备

◼ -c 抓取多少条报文

◼ --time-stamp-precision 指定捕获时的时间精度,默认微妙 micro,可选纳秒 nano

◼ -s 指定每条报文的最大字节数,默认 262144 字节

tcpdump 抓取各种报文

tcpdump -D 显示网卡设备

tcpdump -i eth0 抓取 eth0 的报文

tcpdump -i lo 抓取回环报文

tcpdump -i eth0 -c 2 抓取 2 条报文后退出

tcpdump -i eth0 -c 2 --time-stamp-precision=nano 默认按纳秒

telnet 127.0.0.1 80 可以通过 telnet 上去测试抓包,此时应用抓取 lo

表达式

原语:名称或数字,以及描述它的多个限定词组成

限定词:

Type:设置数字或者名称所指示类型,例如 host www.baidu.com

Dir:设置网络出入方向,例如 dst port 80

Proto: 指定协议类型,例如 udp

原语运算:

与:&&或者 and

或:||或者 or

非:!或者 not

src or dst portrange 6000-8000 && tcp

tcpdump -i eth0 -c 10 host www.baidu.com and port 80

同时在另一个终端 curl www.baidu.com

限定词

Type:设置数字或者名称所指示类型

host、port

◼ net, 设定子网, net 192.168.0.0 mask 等价于 net 192.168.0.0/24

◼ portrange,设置端口范围,例如 portrange 6000-8000

Dir:设置网络出入方向

src、dst、src or dst、src and dst

◼ ra、ta、addr1、addr2、addr3、addr4(仅对 IEEE 802.11 Wireless Lan 有效)

Proto:指定协议类型

ethr、fddi、tr、wlan、ip、ip6、arp、tcp、udp 等

文件操作

-w 输出结果至文件

-C 限制输入文件的大小,超出以后缀 1 等数字的方式递增。注意单位是 1,000,000 字节

-W 指定输出文件的最大数量,到达后重新复写第一个文件

-G 指定每个 N 秒就重新输出至新文件,注意-w 参数应基于 strftime 参数指定文件名

-r 读取一个抓包文件

-V 将待读取的多个文件名写入一个文件中,通过读取该文件同时读取多个文件

tcpdump -c 2 -w a 保存 2 个包到 a 文件

tcpdump -r a 读取 a 文件显示

tcpdump -c 2 -w b 保存 2 个包到 b 文件

vim c 文件,把逐行写入 a、b,如下所示

Linux 服务器系统最全性能优化实战

 

tcpdump -V c 读取多个文件

tcpdump -C 1 -W 3 abc 限制文件大小为 1,000,000 字节,输出文件最大数量为 3

tcpdump -G 3 -w def%M-%S

strftime 参考:

Linux 服务器系统最全性能优化实战

 


Linux 服务器系统最全性能优化实战

 

输出时间格式

Linux 服务器系统最全性能优化实战

 


Linux 服务器系统最全性能优化实战

 


Linux 服务器系统最全性能优化实战

 

-e 显示数据链路层头部

-q 不显示传输层信息

-v 显示网络层头部更多的信息,如 TTL、id 等

-n 显示 IP 地址、数字端口代替 hostname 等

-S TCP 信息以绝对序列号代替相对序列号

-A 以 ASCII 方式显示报文内容,适用 HTTP 分析

-x 以 16 进制方式显示报文内容,不显示数据链路层

-xx 以 16 进制方式显示报文内容,显示数据链路层

-X 同时以 16 进制及 ASCII 方式显示报文内容,不显示数据链路层

-XX 同时以 16 进制及 ASCII 方式显示报文内容,显示数据链路层

sudo tcpdump -r a -e

sudo tcpdump -r a -q

sudo tcpdump -r a -v

sudo tcpdump -r a -n

sudo tcpdump -r a -S

sudo tcpdump -r a -A

sudo tcpdump -r a -x

sudo tcpdump -r a -xx

sudo tcpdump -r a -X

sudo tcpdump -r a -XX

显示去往 102.168.1.102 的所有会话信息:

tcpdump -i eth1 'dst 192.168.1.102 and (port 21 or 20)'

显示去往 102.168.1.102 的所有会话信息:

tcpdump -i eth0 'dst 192.168.1.102 and tcp and port 8080'

nmap

通常用于查看本机有哪些端口对外提供服务,或者服务器有哪些端口对外开放。

注意,实际能否进行连通还要看防火墙的设置。

使用方式:nmap -v -A localhost

# ubuntu 安装

sudo apt install nmap

#查看主机当前开放的端口

nmap localhost

#查看主机端口(1024-65535)中开放的端口

nmap -p 1024-65535 localhost

#探测目标主机开放的端口

nmap -PS 192.168.56.101

#探测所列出的目标主机端口

nmap -PS22,80,3306 192.168.56.101

#探测目标主机操作系统类型

nmap -O 192.168.56.101

#探测目标主机操作系统类型

nmap -A 192.168.56.101

ethtool

ethtool 用于查看网卡的配置情况。

sudo apt install ethtool

命令使用格式:ethtool [option] interface

查看网卡:

ethtool ens33

注意:在云主机检测不到网卡信息

Linux 服务器系统最全性能优化实战

 

(1)查看网卡的接口信息

ethtool eth1

(2)关闭网卡 eth1 的自动协商

ethtool -s eth1 autoneg off

(3)修改网卡速率为 100Mb/s

ethtool -s eth4 speed 100

(4)查看网卡驱动信息

ethtool -i eth0

(5)查看网卡的一些工作统计信息

ethtool –S eth0

(6)停止和查看网卡的发送模块 TX 的状态

#修改 tx 的状态

ethtool -A tx off eth0

//查看 tx 的状态

ethtool -a eth0

(7)关闭网卡对收到的数据包的校验功能

//关闭校验

ethtool -K rx off eth0

//查看校验启动状态

ethtool –k eth0

lsof

lsof 是系统管理/安全的尤伯工具。指“列出打开文件(lists openfiles)”。

Linux 服务器系统最全性能优化实战

 


Linux 服务器系统最全性能优化实战

 

可以使用它来获得你系统上设备的信息,你能通过它了解到指定的用户在指定的地点正在碰什么东西,或者甚至是一个进程正在使用什么文件或网络连接。具体可以使用 man lsof 查看帮助文档。

关键选项

默认 : 没有选项,lsof 列出活跃进程的所有打开文件。

组合 : 可以将选项组合到一起,如-abc,但要当心哪些选项需要参数

-a : 结果进行“与”运算(而不是“或”)

-l : 在输出显示用户 ID 而不是用户名

-h : 获得帮助

-t : 仅获取进程 ID

-U : 获取 UNIX 套接口地址

-F : 格式化输出结果,用于其它命令。如-F pcfn(用于进程 id、命令名、文件描述符、文件名,并以空终止)

获取网络信息

显示端口被某个程序占用

lsof -i:port

Linux 服务器系统最全性能优化实战

 


Linux 服务器系统最全性能优化实战

 

lsof -c abc 显示 abc 进程现在打开的文件,可以使用 less 进行分页,b 向后翻一页,d 向后翻半页

Linux 服务器系统最全性能优化实战

 


Linux 服务器系统最全性能优化实战

 

6 Linux 系统的高级工具

pstack

sudo apt install pstack

pstack 命令用来显示每个进程的调用栈。可以使用 pstack 来查看进程正在挂起的执行方法,也可以用来查看进程的本地线程堆栈,与 JVM 的 jstack 配合可以看到 JVM 线程运行的全景。

使用方式:pstack 进程 ID

Linux 服务器系统最全性能优化实战

 

strace

系统调用工具,是 Linux 系统下的一款程序调试工具,用来监控一个应用程序所使用的 系统调用,通过它可以跟踪系统调用,让你熟悉一个 Linux 程序在背后是怎么工作的。 适用于想研究 Linux 底层的工作机制的场景。

参数

-c 统计每一系统调用的所执行的时间,次数和出错的次数等。

-d 输出 strace 关于标准错误的调试信息。

-f 跟踪由 fork 调用所产生的子进程。

-ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的 filename.pid 中,pid 是各进程的进程号

-F 尝试跟踪 vfork 调用.在-f 时,vfork 不被跟踪.

-h 输出简要的帮助信息

-i 输出系统调用的入口指针

-q 禁止输出关于脱离的消息

-r 打印出相对时间关于,每一个系统调用

-t 在输出中的每一行前加上时间信息

-tt 在输出中的每一行前加上时间信息,微秒级

-ttt 微秒级输出,以秒了表示时间

-T 显示每一调用所耗的时间

-v 输出所有的系统调用.一些调用关于环境变量,状态,输入输出等调用由于使用频繁,默认不输出

-V 输出 strace 的版本信息

-x 以十六进制形式输出非标准字符串

-xx 所有字符串以十六进制形式输出

-a column

设置返回值的输出位置.默认 为 40

-e expr

指定一个表达式,用来控制如何跟踪.格式如下

[qualifier=][!]value1[,value2]...

qualifier 只能是 trace,abbrev,verbose,raw,signal,read,write 其中之一.value 是用来限定的符号或数字.默认的 qualifier 是 trace.感叹号是否定符号.例如:

-eopen 等价于 -e trace=open,表示只跟踪 open 调用.而-etrace!=open 表示跟踪除了 open以外的其他调用.有两个特殊的符号 all 和 none.

注意有些 shell 使用!来执行历史记录里的命令,所以要使用\.

-e trace=set

只跟踪指定的系统 调用.例如:-e trace=open,close,rean,write 表示只跟踪这四个系统调用.默认的为 set=all.

只跟踪有关文件操作的系统调用

-e trace=file

只跟踪有关进程控制的系统调用

-e trace=process

跟踪与网络有关的所有系统调用

-e trace=network

跟踪所有与系统信号有关的 系统调用

-e strace=signal

跟踪所有与进程通讯有关的系统调用

-e trace=ipc

设定 strace 输出的系统调用的结果集.-v 等与 abbrev=none.默认为 abbrev=all

-e abbrev=set

指定跟踪的系统信号.默认为 all.如 signal=!SIGIO(或者 signal=!io),表示不跟踪 SIGIO 信号.

-e signal=set

输出从指定文件中读出 的数据.例如:

-e read=set

-e read=3,5

输出写入到指定文件中的数据

-e write=set

输出写入到指定文件中的数据

-o filename

将 strace 的输出写入文件 filename

跟踪指定的进程 pid.

-p pid

指定输出的字符串的最大长度.默认为 32.文件名一直全部输出

-s strsize

以 username 的 UID 和 GID 执行被跟踪的命令

-u username

实时查看进程

Linux 服务器系统最全性能优化实战

 


Linux 服务器系统最全性能优化实战

 


Linux 服务器系统最全性能优化实战

 

proc 文件系统

显示 CPU 信息:

cat /proc/cpuinfo

显示内存信息:

cat /proc/meminfo

显示详细的内存映射信息:

cat /proc/zoneinfo

显示磁盘映射信息:

cat /proc/mounts

查看系统平均负载命令:

cat /proc/loadavg

7 日志监控工具

tail

在实时日志上打印颜色,给每个状态给上不同的颜色,INF 绿色、WARN 黄色、ERROR 红色。

Linux 服务器系统最全性能优化实战

 

multitail

可同时开启多视窗看 log,适合用在看部署在很多机器上的项目的 log -cS。

[color_scheme] : 可以选择输出的 log 的颜色,推荐使用 goldengate,也可自定义(修改

/etc/multitail.conf)

8 性能监控

pmap

pmap [options] PID

Pmap 提供了进程的内存映射,pmap 命令用于显示一个或多个进程的内存状态。其报告进程的地址空间和内存状态信息。Pmap 实际上是一个 Sun OS 上的命令,linux 仅支持其有限的功能。但是它还是对查看完整的进程地址空间很有帮助。需要 PID 或者运行的进程的唯一进程 ID 来查看进程内存状态,可以通过/proc 或者常规命令比如 top 或 ps 得到。

Linux 服务器系统最全性能优化实战

 

更详细的输出可以使用-X 参数。

这里的输出有很多的[ anon ]行,表示在磁盘上没有对应的文件,这些一般都是可执行文件或者动态库里的 bss 段。当然有对应文件的 mApping 也有可能是 anonymous,比如文件的数据段。

接下来 8 个字段的含义分别如下:

1. Size:表示该映射区域在虚拟内存空间中的大小。

2. Rss:表示该映射区域当前在物理内存中占用了多少空间。

3. Shared_Clean:和其他进程共享的未被改写的 page 的大小。

4. Shared_Dirty: 和其他进程共享的被改写的 page 的大小。

5. Private_Clean:未被改写的私有页面的大小。

6. Swap:表示非 mmap 内存(也叫 anonymous memory,比如 malloc 动态分配出

来的内存)由于物理内存不足被 swap 到交换空间的大小。

7. Pss:该虚拟内存区域平摊计算后使用的物理内存大小(有些内存会和其他进程共

享,例如 mmap 进来的)。比如该区域所映射的物理内存部分同时也被另一个进

程映射了,且该部分物理内存的大小为 1000KB,那么该进程分摊其中一半的内

存,即 Pss=500KB。

nmon 性能监控

$ sudo apt-get install nmon

$ nmon

Linux 服务器系统最全性能优化实战

 

后台监控

为了配合性能测试,往往需要将一个时间段内系统资源消耗情况记录下来,这时可以使用命令在远程窗口执行命令:

./nmon/ nmon_x86_rhel5 -f -N -m /nmon/log -s 30 -c 120

其中各参数表示:

-f 按标准格式输出文件:_YYYYMMDD_HHMM.nmon

-N include NFS sections

-m 切换到路径去保存日志文件

-s 每隔 n 秒抽样一次,这里为 30

-c 取出多少个抽样数量,这里为 120,即监控=120*(30/60/60)=1 小时

根据小时计算这个数字的公式为:c=h3600/s,比如要监控 10 小时,每隔 30 秒采样一次,则 c=103600/30=1200

该命令启动后,会在 nmon 所在目录下生成监控文件,并持续写入资源数据,直至 360个监控点收集完成——即监控 1 小时,这些操作均自动完成,无需手工干 预,测试人员可以继续完成其他操作。如果想停止该监控,需要通过“#ps –ef|grep nmon”查询进程号,然后杀掉该进程以停止监控。

定时任务

除配合性能测试的短期监控,也可以实现对系统的定期监控,作为运营维护阶段的参考。定期监控实现如下:

(1) 执行命令:#crontab –e

(2)在最后一行添加如下命令:

0 8 * * 1,2,3,4,5 /nmon/nmon_x86_rhel5 -f -N -m /nmon/log -s 30 -c 1200

表示:周一到周五,从早上 08 点开始,监控 10 个小时(到 18:00 整为止),输出到/nmon/log

测试指标可视化

nmon 命令 生成的 nmon 可以通过工具进行可视化展示,一般可以使用 nmonchart、nmon_analyser、nmonchart、nmonechart 使用 google charts 生成 html 报告。

glances 系统监控

sudo apt-add-repository ppa:arnaud-hartmann/glances-stable

sudo apt-get update

sudo apt-get install glances

执行:glances

Linux 服务器系统最全性能优化实战

 

除了很多命令行选项之外,Glances 还提供了更多的可在其运行时开关输出信息选项的快捷键,下面是一些例子:

a – 对进程自动排序

• c – 按 CPU 百分比对进程排序

• m – 按内存百分比对进程排序

p – 按进程名字母顺序对进程排序

• i – 按读写频率(I/O)对进程排序

• d – 显示/隐藏磁盘 I/O 统计信息

• f – 显示/隐藏文件系统统计信息

• n – 显示/隐藏网络接口统计信息

• s – 显示/隐藏传感器统计信息

• y – 显示/隐藏硬盘温度统计信息

• l – 显示/隐藏日志(log)

• b – 切换网络 I/O 单位(Bytes/bits)

• w – 删除警告日志

• x – 删除警告和严重日志

• 1 – 切换全局 CPU 使用情况和每个 CPU 的使用情况

• h – 显示/隐藏这个帮助画面

• t – 以组合形式浏览网络 I/O

• u – 以累计形式浏览网络 I/O

• q – 退出(‘ESC‘ 和 ‘Ctrl&C‘ 也可以)

Glances 对于大多用户而言是个在系统资源上提供过多信息的工具。但是如果你是一个想要仅从命令行就能快速获取系统整体状况的系统管理员,那这个工具绝对是你的必备利器。

Linux 服务器系统最全性能优化实战

 

今天的文章就分享到这里,欢迎关注,收藏,转发,点赞

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>