当前位置: 首页 > news >正文

运维面试题01

网络相关

tcp三次握手,四次挥手

三次握手(TCP 连接建立)

  1. SYN:客户端发送 SYN(seq=x)请求建立连接。

  2. SYN-ACK:服务器回复 SYN-ACK(seq=y,ack=x+1),表示同意连接。

  3. ACK:客户端发送 ACK(ack=y+1),连接建立。

目的:确保双方具备发送和接收能力,防止历史连接干扰。


四次挥手(TCP 连接断开)

  1. 客户端发送 FIN,请求断开连接,关闭客户端到服务端的数据传送,客户端进入 FIN_WAIT_1 状态。

  2. 服务器回复 ACK,服务端进入 CLOSE_WAIT 状态。但仍可能有数据未发送完。

  3. 服务器发送 FIN,关闭服务端到客户端的数据传送,服务端进入 LAST_ACK 状态,表示数据传输完毕。

  4. 客户端收到 FIN 后进入 TIME_WAIT 状态,发送 ACK 给服务端,服务端进入CLOSED 状态,至此完成四次握手。

TIME-WAIT 状态是为了确保客户端发送的 ACK 确实到达服务器,并且防止之前的连接数据包在网络中滞留,可能会影响未来的连接

服务器出现了大量TIME_WAIT状态如何检测和解决

1.检测其数量和信息:

netstat -an | grep TIME_WAIT 

2.查看是否端口耗尽(短时间内连接数太多)

ss -n | awk '/^tcp/ {++s[$1]} END {for(k in s) print k, s[k]}'

3.确认是否是客户端主动断开连接

tcpdump 抓包,查看 FIN、ACK 等行为,定位连接关闭一方

4.检查系统资源限制

ulimit -n              # 当前最大打开文件数
cat /proc/sys/net/ipv4/ip_local_port_range  # 本地可用端口范围

常见解决方案

.1 修改服务器内核参数

net.ipv4.tcp_tw_reuse = 1 #表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1      # 表示开启TCP连接中TIME-WAIT sockets的快速回收。
net.ipv4.tcp_fin_timeout = 10    # 缩短 FIN_WAIT 超时时间
net.ipv4.ip_local_port_range = 1024 65000  # 扩大可用端口范围

2.提高资源限制:

ulimit -n 65535  # 临时提高最大文件句柄数,防止资源耗尽

3.优化业务侧逻辑:

  • 避免频繁创建短连接,尽可能使用 长连接池

  • 对于客户端频繁主动断开连接的情况,考虑连接重用或引入 连接代理(如 Nginx)

4.使用四层负载均衡(如 LVS):

LVS 属于内核态转发,性能极高,避免了中间件层产生大量连接。

讲一下ospf协议

  • 特点:基于链路状态算法,收敛快,无自环,支持层次化网络,使用区域划分。

  • 类型:链路状态路由协议

  • 工作原理

    • 发现邻居:Hello 包建立和维护邻居关系。

    • 链路状态信息交换:用 DD、LSR、LSU、LSAck 交换链路状态。

    • 构建拓扑图:收集信息形成 LSDB,构建最短路径树。

    • 计算路由:用 SPF 算法算最佳路径。

  • 应用场景:大型企业网、数据中心网络。

[R1] ospf 1               # 创建 OSPF 实例 1
[R1-ospf-1] area 0        # 使用 area 0
[R1-ospf-1-area-0.0.0.0] network 10.0.12.0 0.0.0.255  # 宣告直连网段
display ospf peer  #看邻居表
display ip routing-table  #看路由表

服务器  linux相关的

常见端口:

  1. 22 (SSH)

  • 用途:安全远程登录到服务器。

  • 命令检查ss -tulnp | grep :22netstat -tulnp | grep :22

  1. 80 (HTTP)

  • 用途:Web 服务器使用的默认端口,用于未加密的 HTTP 通信(如 Nginx、Apache)。

  • 命令检查curl -I http://your-server-ip

  1. 443 (HTTPS)

  • 用途:安全 HTTP 通信,使用 SSL/TLS 加密的 Web 服务器(如 Nginx、Apache)。

  • 命令检查curl -I https://your-server-ip

  1. 3306 (MySQL)

  • 用途:MySQL 数据库默认监听端口。

  • 命令检查mysql -u root -p -h 127.0.0.1 -P 3306

  1. 5432 (PostgreSQL)

  • 用途:PostgreSQL 数据库默认监听端口。

  • 命令检查pg_isready -h localhost -p 5432

  1. 6379 (Redis)

  • 用途:Redis 内存数据库的默认端口。

  • 命令检查redis-cli -h localhost -p 6379 ping

  1. 8080 (常用于 Web 应用)

  • 用途:备用 Web 服务器端口,Tomcat、Jenkins 等常用。

  • 命令检查curl -I http://your-server-ip:8080

  1. 8443 (HTTPS 备用端口)

  • 用途:Tomcat、Spring Boot 应用的 HTTPS 端口

  • 命令检查curl -I https://your-server-ip:8443

  1. 25 (SMTP)

  • 用途:邮件传输协议(SMTP),用于发送邮件。

  • 命令检查telnet smtp.example.com 25

  1. 53 (DNS)

  • 用途:DNS 解析服务(如 BIND)。

  • 命令检查nslookup google.com 8.8.8.8

谈谈进程,线程,协程

协程不是进程也不是线程,而是一个特殊的函数,这个函数可以在某个地方挂起,并且可以重新在挂起处外继续运行。所以说,协程与进程、线程相比并不是一个维度的概念。 一个进程可以包含多个线程,一个线程也可以包含多个协程。简单来说,一个线程内可以由多个这样的特殊函数在运行,但是有一点必须明确的是,一个线程的多个协程的运行是串行的

进程是资源分配的基本单位,一个进程拥有自己的内存空间、文件描述符等。如大型后台服务

线程是程序执行的最小单位,一个进程可以包含多个线程。线程之间共享进程的资源,因此比进程更轻量。用于需要共享资源和高效并发的任务,如计算密集型或多任务的程序

协程并不是操作系统级的线程或进程,而是由程序内部实现的轻量级线程,作用与I/O密集型任务,如网络请求、爬虫和异步数据处理。

为何du和df统计结果不一致?

用户删除了大量的文件被删除后,在文件系统目录中已经不可见了,所以du就不会再统计它。 然而如果此时还有运行的进程持有这个已经被删除的文件句柄,那么这个文件就不会真正在磁盘中被删除,分区超级块中的信息也就不会更改,df仍会统计这个被删除的文件。 可通过 lsof命令查询处于deleted状态的文件,被删除的文件在系统中被标记为deleted。如果系统有大量deleted状态的文件,会导致du和df统计结果不一致。

swap分区的作用

swap分区是一个交换分区,当物理内存不足时, swap分区会释放一部分内存给当前正在运 行的程序使用。这部分空间一般来自那些很长时间没有运行过的程序,系统将这部分空间 临时存放在swap空间中,给那些内存占有率比较高的程序使用。

遇到磁盘空间不足的报错 , 你应该如何处理

可能一:

使用 df -h 命令查看磁盘空间的使用情况,确定哪个目录占用的磁盘空间过高

确定目录后,使用 du -h 命令进行逐级定位,确认到占用空间最大的大文件

查看文件内容,确认一下是否需要保留,如果需要保留就通过压缩导出,不需要保 留可以直接删除,或者对磁盘进行扩容

或者可以直接使用 find 命令查找目录下大于400MB的文件名称,然后进行删除 fi

nd 目录 -size +400M

可能二:

使用 df -h 命令并不能发现大文件,那么可能是文件被删除,但是进程仍然在调用 这个文件

此时可以通过 lsof | grep delete ,找到占用的进程,把这个进程kill掉然后重启 服务器即可

服务器系统日志放在哪里

/var/log/message :系统启动后的信息和错误日志

/var/log/security :与系统安全相关的日志

/var/log/maillog :与系统邮件相关的日志

/var/log/cron :与定时计划任务相关的日志

/var/log/boot.log & /var/log/dmesg :与系统启动相关的日志

说 一 下Nginx做反向代理时常用的算法有哪些

· rr :轮询算法,将用户的请求平均的分配到后台的服务器上,如果后台服务器宕机,会 自动将宕机服务器清除 · wrr :加权轮询,根据权重分配请求,权重越大,处理的请求的越多 · ip_hash:根据请求的hash值进行分配, hash值相同的会被分配到同一台机器上 fair:根据后台服务器的响应时间进行分配,响应时间短的优先分配,必须下载nginx的 upstream_fair模块才能使用 · least_conn:哪台服务器的连接数最少,就分配到那台服务器上

数据库

MySQL数据库的备份方式

· 增量备份 ·

异地备份 ·

重要的数据库会在设计架构时,搭建一个一摸一样的数据库做完整备份 · 通过命令行备份: mysqldump -uroot -p 数据库名 > *.sql文件 · 通过Rsync+Inotify进行冷备 · 设计架构时,会搭建数据库的集群,进行热备 

数据库常用的引擎有什么 , 说 一 下区别

MYISAM:性能优异,查询速度快;但是不支持事务、锁、外键约束等高级功能

INNODB:支持事务、锁、外键约束等高级功能

MEMORY:将数据储存在内存中,方便快速读写

在数据库查询中,发现查询速度变慢,你如何定位和处理

--第一时间排查是否是全局资源瓶颈导致的,使用 top / htop / vmstat 查看服务器负载、内存、IO 等;

--不是的话定位到数据库相关,对慢查询日志分析( less /var/log/mysql/mysql-slow.log**)观察是否存在锁等待(show enging innodb status;) 查看当前活跃连接和 SQL 执行情况(show processlist;) 用explain select 检查是否使用了索引、是否全表扫描、是否 JOIN 不当等。

加索引:如果 EXPLAIN 显示没有使用索引,会考虑在 WHEREJOIN 或排序字段上加合适索引;

SQL 改写:避免使用 SELECT *,拆分过于复杂的大 SQL,减少嵌套子查询;

减少数据量:增加 LIMIT 分页、按需加载、或使用物化视图;

调整 MySQL 参数:如 innodb_buffer_pool_sizequery_cache_sizetmp_table_size 等;

拆库分表 / 读写分离 / 缓存引入:如果是架构性瓶颈,考虑提升读写能力。

MySQL为什么会出现锁表的情况 , 怎么解锁 , 如何避免这种情况的出现锁

高并发情况下造成的io拥堵

数据主从同步失败

使用命令进行锁表: lock

· 解锁: unlock

· 增加数据库的缓存可以避免锁表的情况出现

相关文章:

  • 【C/C++】深入理解指针(四)
  • MySQL的下载、安装、配置
  • 【OpenCV图像处理实战】从基础操作到工业级应用
  • Python实例题:使用Pvthon3编写系列实用脚本
  • 想要从视频中提取背景音乐怎么搞?其实视频提取音频非常简单
  • 如何在Spring Boot中禁用Actuator端点安全性
  • Java集合框架解析
  • matplotlib1-画成对数据图
  • 类的六个默认成员函数
  • ssrf与xxe
  • typescript学习笔记(全)
  • 避免事件“穿透”——Vue 中事件冒泡的理解与解决方案
  • HarmonyOS 框架基础知识
  • 力扣hot100 91-100记录
  • 如何构建高效的接口自动化测试框架?
  • Java转Go日记(十二):Channel
  • Java for循环中,如何在内循环跳出外循环?
  • MySQL 事务(详细版)
  • 2025五一杯数学建模竞赛思路助攻预定
  • 【Java面试笔记:进阶】18.什么情况下Java程序会产生死锁?如何定位、修复?
  • 政治局会议:要提高中低收入群体收入,设立服务消费与养老再贷款
  • 《我的后半生》:人生下半场,也有活力重启的可能
  • 海关总署牵头部署开展跨境贸易便利化专项行动
  • 长征十梦舟揽月稳步推进
  • 秦洪看盘|热点凌乱难抑多头雄心
  • 委托第三方可一次性补缴十多万元的多年社保?广州多人涉嫌被骗后报警