Day5
本文最后更新于86 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

今日主题

Linux 资源排查:CPU、内存、磁盘、系统负载

今日目标

今天学完你要能做到:

1. 会查看磁盘空间
2. 会查看目录大小
3. 会查看内存使用情况
4. 会查看 CPU 占用
5. 会看系统负载(load average)
6. 能初步判断服务器为什么“卡”

今天最重要的一句话:

服务器卡,不一定是 CPU 问题,也可能是内存、磁盘、IO 或负载问题。

一、磁盘空间:df

先敲:

df -h

df = disk filesystem

作用:

查看磁盘还剩多少空间

-h = human readable(人类可读)

会显示成:

10G
200M
1.5T

而不是一长串字节数字。

你会看到类似:

Filesystem      Size  Used Avail Use%
/dev/sda1 40G 18G 20G 48%

重点看:

Size   总大小
Used 已使用
Avail 剩余
Use% 使用率

怎么判断危险?

<70%    正常
70~85% 注意
85~95% 危险
>95% 非常危险
100% 爆了

磁盘满了会发生:

日志写不进去
MySQL 写不进去
Docker 拉不了镜像
服务启动失败
系统卡顿

二、目录大小:du

如果磁盘满了,要找谁占空间。

查看当前目录大小:

du -sh .

查看某目录大小:

du -sh /var/log

查看每个子目录大小:

du -sh *

例如:

2G logs/
500M mysql/
50M nginx/

你就知道:

logs 目录太大了。


常见大户

通常这些目录容易变大:

/var/log
/var/lib/docker
/tmp
/home
/data

以后 Docker 用多了:

/var/lib/docker

经常很大。


三、内存:free

查看内存:

free -h

你会看到:

total
used
free
shared
buff/cache
available

重点先看:

total      总内存
used 已使用
free 空闲
available 真正可用

例如:

8G total
6G used
500M free
2G available

这不一定危险,因为 Linux 会拿内存做缓存。

真正重点看:

available

内存不足会怎样?

系统卡
程序被杀
Docker 容器退出
MySQL 崩
服务响应慢

严重时会 OOM:

Out Of Memory(内存不够)


四、CPU:top

昨天学过:

top

重点看顶部:

Cpu(s)
Mem
load average

CPU 常见指标:

us = 用户程序占用
sy = 系统内核占用
id = 空闲
wa = 等待 IO

重点看:

id(idle)空闲率

比如:

id = 80%

说明:

CPU 很闲。

如果:

id = 2%

说明:

CPU 快满了。


查谁最吃 CPU

进入:

top

按:

Shift + P

按 CPU 排序。

就能看到谁最占 CPU。


五、系统负载:uptime

敲:

uptime

会看到:

load average: 0.20, 0.50, 0.80

分别代表:

1分钟平均负载
5分钟平均负载
15分钟平均负载

怎么理解负载?

假设:

服务器 4 核 CPU

那么:

load = 4

表示:

CPU 刚好忙满。

如果:

load = 8

表示:

任务排队了,机器吃紧。

如果:

load = 20

表示:

服务器可能已经非常卡。


简单判断

如果是 2 核机器:

load < 1 正常
1~2 忙
>2 开始排队
>4 很危险

如果是 4 核:

load < 2 正常
2~4 偏忙
>4 注意
>8 危险

六、一条命令看资源总览

这个非常常用:

top

你会同时看到:

CPU
内存
负载
进程

所以服务器卡了:

第一反应:

top

七、今天的小实验

你今天按顺序敲:

df -h
du -sh ~
free -h
uptime
top

退出:

q

然后:

du -sh /var/log

看看日志目录大小。

如果有 Docker:

du -sh /var/lib/docker

看看 Docker 占多少。


八、以后服务器卡怎么排查

记住这个顺序:

1 看 CPU
top

2 看内存
free -h

3 看负载
uptime

4 看磁盘
df -h

5 找大目录
du -sh *

常见情况 1:CPU 高

表现:

CPU 95%

原因可能:

死循环
程序 bug
流量太大
挖矿木马

常见情况 2:内存高

表现:

available 很低

原因:

程序泄漏
MySQL 太吃内存
Redis 太吃内存
Docker 太多

常见情况 3:磁盘满

表现:

Use% = 100%

原因:

日志爆了
Docker 镜像太多
备份文件太多

常见情况 4:负载高

表现:

load average 很高

原因:

CPU 忙
磁盘 IO 慢
任务排队

九、今日面试表达

今天你要会说:

服务器性能排查时,我一般先通过 top 看 CPU、内存和负载,再通过 free -h 查看可用内存,通过 df -h 查看磁盘空间,通过 du -sh 排查大目录。如果 CPU 高,我会找高占用进程;如果内存不足,我会关注 available;如果磁盘满,我会优先清理日志、缓存或无用镜像;如果负载高,我会进一步分析 CPU 或 IO 是否成为瓶颈。

十、今日复盘模板

# Code 4 云计算复盘 Day 5

## 今日主题
Linux 资源排查:CPU、内存、磁盘、系统负载

## 今日完成的命令
df -h
du -sh
free -h
uptime
top

## 今天理解了什么?
今天理解了服务器卡不一定是 CPU 问题,也可能是内存、磁盘或负载问题。

## 今日面试表达
排查服务器性能问题时,可以从 CPU、内存、磁盘和负载四个方向入手。

反向代理 + 负载均衡,几乎就是:

Nginx
云计算
后端部署
高并发架构
Kubernetes Service / Ingress
微服务网关

这些东西的底层思想。

如果这一块你真的吃透,你以后学:

Docker
K8s
Gateway
Istio
云原生
CDN

都会顺很多。

我给你按照 「大学生能真正理解」+「能拿去面试回答」 的方式细细讲。


第一部分:什么是代理(先建立世界观)

先理解 代理

现实里:

比如你想租房,你不直接找房东,而是找中介。

流程:



中介

房东

拿到房子

这里:

中介 = 代理。


计算机里也一样:

比如浏览器访问网站:

正常:

浏览器 → 网站服务器

如果中间多一个代理:

浏览器 → 代理服务器 → 网站服务器

这就叫:

代理


为什么要代理?

因为代理可以帮你做很多事:

转发请求
缓存内容
隐藏真实服务器
安全控制
统一入口
负载分发
HTTPS 终止
限流
日志记录

所以大厂都大量使用代理层。


第二部分:正向代理

先说正向代理。

场景

你要访问外网:

正常:

你 → Google

如果通过代理:

你 → Proxy → Google

Google 看到的是 Proxy,不是你。


所以:

代理的是客户端

叫:

正向代理(Forward Proxy)


作用:

隐藏客户端
突破网络限制
缓存资源
统一上网出口
审计

面试一句话:

正向代理代理客户端,服务端不知道真实客户端是谁。


第三部分:反向代理(重点)

这个你以后天天见。


普通访问

浏览器:

用户 → Web服务器

例如:

用户 → Nginx

如果后面有多个服务器:

用户

Nginx

真实服务器

用户只知道 Nginx。

不知道后面是谁。


所以:

代理的是服务端

叫:

反向代理(Reverse Proxy)


一句话:

用户访问代理服务器,代理服务器去访问真实服务。


例子(你的博客)

假设你的 Halo:

监听:

127.0.0.1:8090

外界不能直接访问。


前面放 Nginx:

监听:

80
443

流程:

用户访问域名

DNS解析到服务器IP

进入80/443端口

Nginx接收请求

转发到127.0.0.1:8090

Halo处理

返回页面

Nginx返回给用户

用户看到:

www.xxx.com

不知道后面是:

127.0.0.1:8090

这就是反向代理。


为什么需要反向代理

1)隐藏后端服务器

用户不知道真实机器。

安全。


2)统一入口

统一走:

80
443

后面可以有:

8080
9000
3000
5000

3)HTTPS

SSL 证书放 Nginx。

后端不用配置 HTTPS。


4)缓存静态资源

提高性能。


5)限流

比如:

每秒 1000 请求。

超出限制直接拦。


6)日志

统一记录。


7)负载均衡

这是重点中的重点。


第四部分:负载均衡

先理解:

负载 = 工作压力。

均衡 = 平均分。

所以:

把请求平均分给多台服务器。


没有负载均衡

只有一台:

用户 → Server1

100 万用户全打这一台。

会炸。


有负载均衡

        → Server1
用户 → Nginx → Server2
→ Server3

请求被分散。

每台只承担一部分。


这就是:

Load Balance


为什么需要

扛高并发

10000 QPS:

3 台机器:

每台 3000+。


高可用

Server2 挂了:

自动摘除

请求去:

Server1
Server3

业务继续。


横向扩容

机器不够:

加机器。

3台 → 10台

第五部分:Nginx 怎么做负载均衡

配置:

upstream backend {
server 10.0.0.11:8080;
server 10.0.0.12:8080;
server 10.0.0.13:8080;
}

server {
listen 80;

location / {
proxy_pass http://backend;
}
}

流程:

用户 → Nginx → 三台机器之一

第六部分:负载均衡算法

这是高频面试题。


1)轮询 round robin(默认)

顺序分配:

请求1 → A
请求2 → B
请求3 → C
请求4 → A

循环。

优点:

简单。

缺点:

没考虑机器性能差异。


2)weight 权重

强机器多分。

例如:

server A weight=5;
server B weight=2;
server C weight=1;

比例:

5:2:1

A 分更多。


3)ip_hash

按客户端 IP 固定。

比如你总访问:

都去:

Server2

适合:

Session 粘性。


4)least_conn

给连接数最少的机器。

更智能。


第七部分:什么是 Session 粘性

登录网站:

登录状态存在 Server1。

下一次请求去了 Server2。

Server2 没登录信息。

用户掉线。


解决:

固定用户去同一台。

叫:

Session Sticky


方案:

ip_hash
Redis共享Session
JWT

现在更多用:

JWT。


第八部分:四层和七层负载均衡(大厂高频)


四层 LB

TCP/UDP 层。

只看:

IP
Port

转发。

不看内容。

快。

例如:

F5 Networks F5、HAProxy HAProxy、云厂商 SLB。


七层 LB

HTTP 层。

能看:

URL
Header
Cookie
Host

可以智能转发:

/api → Java
/static → CDN
/admin → 管理后台

Nginx Nginx 就是七层负载均衡典型。


第九部分:大厂面试题(高频)

题 1:什么是反向代理?

标准回答:

反向代理是代理服务端的一种代理模式,客户端访问代理服务器,由代理服务器转发请求到后端真实服务器,再将响应返回给客户端。客户端不知道真实服务节点,只知道代理入口。


题 2:反向代理有什么作用?

答:

隐藏后端
统一入口
SSL终止
缓存
限流
日志
负载均衡
安全防护

题 3:什么是负载均衡?

答:

将请求分发到多台服务器,均衡各节点压力,提高系统吞吐、高可用和扩展性。


题 4:常见算法?

答:

轮询
加权轮询
ip_hash
least_conn

题 5:四层和七层区别?

答:

四层:

TCP/UDP
速度快
功能简单

七层:

HTTP/HTTPS
能做智能路由
功能强

题 6:Nginx 挂了怎么办?

答:

高可用:

Keepalived + 双Nginx
VIP漂移

比如用 Keepalived Keepalived。


题 7:为什么大厂不用单机 Nginx?

因为:

单点故障。

必须:

双机热备
集群
云LB

题 8:K8s Service 为什么也是负载均衡?

因为它会:

把流量分给多个 Pod

本质一样。


你把这一章吃透,你对 Nginx / K8s / Gateway 的理解会直接上一个台阶。

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇