【Linux】日常运维技能手册(持续更新)

发布时间 2023-09-22 16:42:03作者: outrun2023

 

前言

作为一个干了各种脏活累活苦活的运维人员,日常总有些扯淡的工作会落到我们头上,有很多基础的测试类的工作其实谁都能做,所以记录下来,作为一个参考手册,一方面方便自己的同事查看,一方面也能帮助帮助其他维护人员。

内存占用排查

运维操作系统经常会遇到内存占用高的情况,不过Linux的内存管理非常复杂,光是从博客来看是没法在任何场景都拿出很好的解决方案,这里只列出我常用的一些排查手段和方法;

free这种命令的用法网上已经说烂了,就不多说了,不过,我们还是要借助它来查一些东西;

缓存占用

经常会遇到操作系统内存使用率很高的情况,查看发现基本都是cache占用的,这个时候可能会选择人工介入:

手动释放

手动的缓存释放其实是不常见的,我一般也不会去手动释放,但是必要的时候还是记住这几个命令和他们的影响:

内核参数选择

如果想要对操作系统的缓存占用策略做一定调整,可以参考以下配置项进行:

配置文件功能默认值
dirty_background_ratio 触发回刷的脏数据占可用内存的百分比 0
dirty_background_bytes 触发回刷的脏数据量 10
dirty_bytes 触发同步写的脏数据量 0
dirty_ratio 触发同步写的脏数据占可用内存的百分比 20
dirty_expire_centisecs 脏数据超时回刷时间(单位:1/100s) 3000
dirty_writeback_centisecs 回刷进程定时唤醒时间(单位:1/100s) 500

网络测试是否连通

这种一般在和上下游进行联调时会用到,有几种应用场景:

  • 测试指定IP是否能通
  • 指定端口需要测试连通性;
  • 网络侧已声明关闭防火墙或者放行范围端口;
  • 服务无法连通,和上下游甩锅时;

测定指定IP是否能通

当需要测试指定IP是否能通是,这个一般来说ping测试即可,但是需要注意的是,目标服务器可能是禁ping了,可以查看目标节点的内核参数:

sysctl -a |grep net.ipv4.icmp_echo_ignore_all
# 值如果为1则是禁ping,为0则允许ping包测试
net.ipv4.icmp_echo_ignore_all = 0

在确认没有禁ping以后如果还是无法ping通,可以初步确认网络是不通的;

测试端口级别的连通

首先是指定端口,当需要测试从源地址目的地址目的端口是否连通时,我们一般使用telnet命令,一般不是最小化安装的系统都会带这个工具:

telnet dest_ip dest_port

以上是典型的端口不通的场景,会返回Connection refused的信息;

其次,如果各方都说自己的网络没问题,也就是理论上网络层已经没有任何限制的时候,要测试到目的端的端口是否连通,可以使用python在目的端临时启动一个端口:

python -m SimpleHTTPServer 8000

8000可以换成你要测试的端口,然后再在源端进行测试,telnet命令如上;

如果没有telnet命令怎么办?

第一种当然是直接安装telnet包了,这个外网环境可以yum直接装,如果是内网环境可以自己下载rpm包到服务器上进行安装:

yum install telnet
# rpm -ivh telnet-0.17-65.el7_8.x86_64.rpm

以上是在Centos7的安装命令;

第二种方式是,你可以使用wget命令测试,当然这个适用场景较少,一般来说结合上面所说的python方式测试是可行的,你可以在目的端的服务启动目录下放一个测试文件,在源端服务器wget这个文件;

常见网络不通的原因

测试后发现网络不通是很经常的事情,这里列出几种常见的原因及简单的处理方式

本地防火墙

一般来说本地防火墙是我们最先检查的点,这里一定要区分firewalld和iptables两种防火墙服务的区别:

firewalld

firewalld是开启后,默认只放开ssh的22端口的,所以在有人手动添加其他策略前,你如果发现firewalld开启了,那第一步要做的就是放开你的端口或者直接停掉它

iptables

iptables开启后默认是全部放行,没有策略,所以如果确认是没有策略的,可以不管,一般不会造成影响;

本地端口监听

如果确认了防火墙没有限制,端口测试还不通,可以确认下你的目的服务器上指定的端口是否在监听;

下图显示的案例就是我在目的端启用了12345端口,telnet能通,然后我把监听停止,再测试时已经不通了:

路由表

这种情况一般在特殊环境才要查,比如我们环境的接口服务器,路由信息比较丰富:

如果你的环境也有比较多的路由,一定也要检查下路由表,若有必要,进行路由的添加和设置;添加路由的样例如下:

# 添加网段的路由-net后跟网段,gw为网关,netmask为掩码,dev为绑定的网卡
route  add -net 10.2.1.0 gw 10.2.1.129 netmask 255.255.255.0 dev bond0
# 添加ip的路由-host后跟ip
route  add -net 10.2.1.13 gw 10.2.1.129 dev bond0

ip计算和子网掩码以及一些网络基础知识这些推荐去看看B站的蛋老师的视频,通俗易懂,附上链接:IPv4地址和子网掩码

网络防火墙

大部分情况下,上述的步骤都昨晚并确认没有异常的话,本地已经做不了更多的事情,直接把锅甩给网络组进行后续排查吧;