基础

目录切换

1
2
3
4
5
cd usr # 切换到该目录下的usr目录
cd .. # 切换到上一层目录
cd / # 切换到系统根目录
cd ~ # 切换到用户主目录
cd - # 切换到上一个操作所在目录

文件压缩

1
2
3
4
5
tar -zcvf <打包压缩后的文件名> <要打包压缩的文件>
# z: 调用gzip压缩命令进行压缩
# c: 打包文件
# v: 实现运行过程
# f: 指定文件名
1
2
3
4
tar -xvf <压缩文件>
# x: 表示解压
# v: 实现运行过程
# f: 指定文件名

显示网络状态

1
2
3
4
5
6
7
8
9
netstat -a    # 显示详细的网络状况
# -a或--all:显示连线中的所有Socket
netstat -apt # 显示当前UDP端口号使用情况
netstat -apu # 显示当前UDP端口号使用情况
# -t或--tcp:显示TCP传输协议的连线状况
# -u或--udp: 显示UDP传输协议的连线状况
# -p或--programs 显示正在使用Socket的程序识别码和程序名称
netstat -l # 显示监听的套接口
# -l或--listening 显示监控中的服务器的Socket。

top 输出详解

顶部

  • Load Average 平均负载,标识在一定时间范围内系统中正在运行或等待运行的进程数量。以三个值表示,分别对应在过去1分钟、5分钟和15分钟的平均负载。
  • Tasks 任务数目,正在运行的进程数量。包括僵尸进程。
  • %CPU
  • MiB Mem
  • MiB Swap
    进程
  • PID 进程唯一标识符号
  • USER 运行进程的用户或者所有者
  • PR 进程的优先级
  • NI 进程的nice值,用于调整进程的优先级
  • VIRT 进程使用的虚拟内存的大小
  • RES 进程实际使用的物理内存大小
  • SHR 进程使用的共享内存大小
  • S 进程的状态
  • %CPU 进程使用的CPU资源百分比
  • %MEM 进程使用的内存资源百分比
  • TIME+ 进程自启动以来所使用的CPU时间
  • COMMAND 运行进程的命令或者可执行文件的名称

问题

发现服务器很卡,可能的原因有哪些?

  1. CPU利用率过高:可能是某个进程或者线程占用了大量的CPU资源,导致其他进程或线程无法得到足够的CPU时间片,从而导致服务器变慢。
  2. 内存使用过高:可能是某个进程占用了大量的内存,导致系统的可用内存不足,进而引发频繁的页面交换,导致服务器变得卡顿。
  3. 磁盘I/O过高,可能是某个进程进行了大量的磁盘读写操作,导致磁盘I/O过高,进而影响到其他进程的磁盘读写,导致服务器变得卡顿。
  4. 网络带宽不足,可能是网络流量过大,导致网络带宽不足,进而影响服务器的网络通信,导致服务器变得卡顿。

排查方法如下:

  1. 查看系统负载:可以使用top或htop命令查看系统的负载情况,包括CPU使用率、内存使用情况、磁盘I/O等。
  2. 查看进程状态
  3. 查看网络状态
  4. 使用专业工具
  • 代码死循环属于上面哪一种情况?
    占用大量CPU资源

  • 死锁属于上面哪一种情况?
    如果忙等待的话,会占用大量的CPU资源。

  • 多进程,多线程频繁切换会导致上面哪一种情况?
    非自愿上下文切换多,说明进程都在被强制调度,说明都在争抢CPU,CPU成为瓶颈。

如何排查CPU 100% ?

  1. 首先使用top命令排查是哪个进程占用了CPU
  2. 使用top -Hp PID,显示进程PID下的所有线程
  3. gdb调试线程

如何排查内存超出问题?

  1. 首先需要计算大致内存消耗
  2. 在程序运行的过程中,通过添加断点等方式,观察内存的变化情况
  3. 找到与内存开销不相符的地方,进行进一步的观察和调试。

参考

https://zhuanlan.zhihu.com/p/129730315