32 篇文章带有标签 “sysadmin”

GPU 服务器不能访问

13 号 上午 GPU 服务器突然不能访问了,可以通过 CPU 服务器访问 GPU 服务器。这一周一直在查找问题,这里记录一下过程。

traceroute 路由追踪

  • GPU 服务器
traceroute gpu1
traceroute to gpu1 (172.16.33.66), 64 hops max, 52 byte packets
 1  * * *
 2  172.16.136.2 (172.16.136.2)  7.462 ms  3.820 ms  3.014 ms
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *
  • CPU 服务器
traceroute cpu1
traceroute to cpu1 (172.16.33.157), 64 hops max, 52 byte packets
 1  * * *
 2  172.16.136.2 (172.16.136.2)  7.827 ms  4.712 ms  3.162 ms
 3  * * *
 4  cpu1 (172.16.33.157)  8.619 ms  4.205 ms  4.982 ms

tcpdump 抓包

在GPU服务器上抓取 22 端口的数据包

Linux 性能优化

CPU

概念

平均负载

单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。

当平均负载高于 CPU 数量 70% 的时候,你就应该分析排查负载高的问题了。一旦负载过高,就可能导致进程响应变慢,进而影响服务的正常功能。 70% 这个数字并不是绝对的,最推荐的方法,还是把系统的平均负载监控起来,然后根据更多的历史数据,判断负载的变化趋势。当发现负载有明显升高趋势时,比如说负载翻倍了,你再去做分析和调查。

工具

查看 cpu核数

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

显示平均负载 uptime

uptime、top,显示的顺序是最近1分钟、5分钟、15分钟,从此可以看出平均负载的趋势

$ uptime
 12:51:13 up 754 days,  2:02,  3 users,  load average: 0.41, 0.65, 2.63

持续自动运行命令 watch

watch -d uptime: -d会高亮显示变化的区域

系统压力测试工具 stress

安装

yum install stress -y

strees: --cpu cpu压测选项,-i io压测选项,-c 进程数压测选项,--timeout 执行时间

我删库了, rm -rf *

今天,我“删库”了......

/data$ ll logs/
rm -rf *

我在根目录查看子目录的信息,确认是想删除的数据,然后顺手执行了 rm -rf * ,杯具产生了......

拼命补救,没成功......

查看目录或文件的 inode id

$ ls -id /
2 /

$ ls -id /usr/
28966913 /usr/

$ ls -id /usr/bin/bash
28967390 /usr/bin/bash

参考资料

逻辑卷管理(Logical Volume Management)

查看 LVM 的相关命令

man lvm
lvm --help

查看系统的块设备 $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 43.4M 1 loop /snap/snapd/14549 loop1 7:1 0 43.3M 1 loop /snap/snapd/14295 loop2 7:2 0 76.3M 1 loop /snap/lxd/22407 loop3 7:3 0 61.9M 1 loop /snap/core20/1328 loop4 7:4 0 55.5M 1 loop /snap/core18/2253 loop5 7:5 0 55.5M 1 loop /snap/core18/2284 loop7 7:7 0 94.5M 1 loop /snap/go/9028 loop8 7:8 0 94.5M 1 loop /snap/go/8839 loop9 7:9 0 76.3M 1 loop /snap/lxd/22358 loop10 7:10 0 61.9M 1 loop /snap/core20/1270 sda 8:0 0 558.9G 0 disk ├─sda1 8:1 0 512M 0 part /boot/efi └─sda2 8:2 0 558.

SSH 登录欢迎信息

终端登录时显示给用户的欢迎消息,无论是通过远程 SSH 登录还是直接通过 TTY 或终端,是 motd 的一部分,即 Message Of The Day 守护程序。 通过修改 /etc/update-motd.d 目录中的 /etc/motd 文件或脚本,可以自定义 motd 消息以适合每个用户或管理员的个性化需求。

附加 motd 消息 sudo sh -c 'echo "Hello World!" > /etc/motd' 退出后重新登录 $ ssh username@hostname Welcome to Ubuntu 20.04 LTS (GNU/Linux 5.4.0-53-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information as of Thu 29 Apr 2021 08:16:49 AM UTC System load: 7.85 Processes: 1046 Usage of /: 62.1% of 548.

命令find

查找文件

-name 或 -iname(大小写不敏感)

find . -name "*.pyc"

-m(最近多长时间修改)

min, 分钟
time, 哪天 0(24小时) 1(24-48小时) 2(48-72小时)
  • 显示 /var/log 目录下最近 10分钟内修改的文件
$ find /var/log -mmin -10
/var/log/messages
  • 以详细信息显示 /var/log 目录下最近 24小时内修改的文件
$ find /var/log -mtime 0 -ls
 33575669      4 drwxr-xr-x  15  root     root         4096 7月 29 06:33 /var/log
 34131780    164 -rw-------   1  root     root       166061 7月 29 10:20 /var/log/messages
  • 显示 /var/log 目录下最近 [0 - 24小时] 修改的文件
find /var/log -mtime -1
  • 显示 /var/log 目录下最近 [24 - 48小时] 修改的文件
find /var/log -mtime 1
  • 显示 /var/log 目录下最近 [48 - ] 修改的文件
find /var/log -mtime +1

-size(文件大小) 显示当前目录下超过 40M的文件 $ find .

命令grep

搜索文件内容

  • 搜索一个文件
grep 'text' hello.txt
  • 忽略字母大小写(-i)
grep -i 'text' hello.txt
  • 搜索多个文件
grep 'text' hello.txt hi.txt
  • 搜索当前目录下所有文件
grep 'text' *
  • 搜索当前目录(包含子目录 -R)下所有文件
grep -R 'text' *

匹配搜索

  • 搜索 pip 配置文件的路径 -R(遍历) -n(行号) -H(文件名)
grep "index-url" ~/.config -RnH
/home/lnsoft/.config/pip/pip.conf:2:index-url = https://mirrors.aliyun.com/pypi/simple/
  • 搜索 pip 配置文件的路径(增加过滤)
find ~ -name pip* | xargs -i grep "index-url" {} --color -nH
/home/lnsoft/.config/pip/pip.conf:2:index-url = https://mirrors.aliyun.com/pypi/simple/
  • 只匹配字符串,不使用正则表达式。
find . | grep -F .run

命令wget

下载多个文件

  • 空格分割
wget https://upload.wikimedia.org/wikipedia/commons/1/13/Intel_CPU_Core_i7_6700K_Skylake_perspective.jpg https://images-na.ssl-images-amazon.com/images/I/51iVSqLIBWL._AC_.jpg
  • 来自文件(-i)
wget -i urls.txt

后台下载(-b)

wget -i urls.txt -b

指定输出目录

wget -i urls.txt -P output

断点续传(-c --continue)

wget -c https://github.com/goharbor/harbor/releases/download/v2.1.3/harbor-offline-installer-v2.1.3.tgz

命令ls

可读的方式显示文件大小

# -h, --human-readable with -l and/or -s, print human readable sizes (e.g., 1K 234M 2G)
ls -lh
ll -h

显示目录的所有子目录的内容

# -R, --recursive list subdirectories recursively
ls -lR
ll -R

按时间进行排序

按时间降序显示当前目录

# -l use a long listing format; -t sort by modification time, newest first
ls -lt
ll -t

按时间升序显示当前目录

# -r --reverse reverse order while sorting
ls -lrt
ll -rt

按大小进行排序

按大小降序显示当前目录

# -S sort by file size, largest first
ls -lS
ll -S

按大小升序显示当前目录

ls -lrS
ll -rS

统计目录下文件数量

统计当前目录下的文件数量

ls -l | grep "^-" | wc -l

统计当前目录下的目录数量

ls -l | grep "^d" | wc -l

统计当前目录下(包含子目录)的文件数量 ls -lR | grep

在Ubuntu上下载docker和nvidia-docker2离线安装包

选择要依赖的操作系统

docker run -it -v `pwd`/offline:/offline ubuntu:20.04 bash

以下是容器内操作

进入映射的下载目录

cd /offline

下载Docker安装包

wget https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/docker-ce_19.03.14~3-0~ubuntu-focal_amd64.deb
wget https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/docker-ce-cli_19.03.14~3-0~ubuntu-focal_amd64.deb
wget https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/containerd.io_1.3.9-1_amd64.deb

下载nvidia-docker2包装包 配置安装源 apt-get install gnupg curl -s -L https://nvidia.github.

SSH允许使用密码进行root登录

安装了Ubuntu系统后,默认ssh不允许使用密码进行root登录,通过如何配置可以实现允许。

登录root

$ su - root

查看ssh配置文件中的PermitRootLogin项

$ nano /etc/ssh/sshd_config
# Authentication:

#LoginGraceTime 2m
#PermitRootLogin prohibit-password
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

修改ssh配置文件中的PermitRootLogin项:PermitRootLogin yes

$ sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config

查看ssh配置文件中的PermitRootLogin项

nano /etc/ssh/sshd_config
# Authentication:

#LoginGraceTime 2m
PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

重启sshd服务

  • systemctl
$ systemctl restart sshd

Linux上查找系统信息

操作系统

Linux内核版本

  • uname
$ uname -r
4.18.0-147.5.1.el8_1.x86_64
  • /proc/version
$ cat /proc/version
Linux version 4.18.0-147.5.1.el8_1.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 8.3.1 20190507 (Red Hat 8.3.1-4) (GCC)) #1 SMP Wed Feb 5 02:00:39 UTC 2020
  • hostnamectl
$ hostnamectl | grep Kernel
            Kernel: Linux 4.18.0-147.5.1.el8_1.x86_64

查找CODENAME

$ cat /etc/os-release | grep VERSION_CODENAME 
VERSION_CODENAME=focal

操作系统信息

$ lsb_release -a
  • Ubuntu
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04 LTS
Release:	20.04
Codename:	focal
  • CentOS
LSB Version:	:core-4.1-amd64:core-4.1-noarch
Distributor ID:	CentOS
Description:	CentOS Linux release 8.1.1911 (Core) 
Release:	8.1.1911
Codename:	Core

配置pip镜像源

加速 pip 下载安装包的速度。下面使用的是来自于阿里云的镜像源:https://mirrors.aliyun.com/pypi/simple/

国内可用的pip镜像源

https://mirrors.aliyun.com/pypi/simple/
https://pypi.tuna.tsinghua.edu.cn/simple/
http://pypi.douban.com/simple/
https://pypi.mirrors.ustc.edu.cn/simple/
http://pypi.hustunique.com/
http://pypi.sdutlinux.org/

更新pip

# pip install --upgrade pip
Looking in indexes: https://mirrors.aliyun.com/pypi/simple/
Requirement already up-to-date: pip in /usr/local/lib/python3.6/site-packages (20.2.4)

临时使用pip镜像

# pip install -i https://mirrors.aliyun.com/pypi/simple/ package

列出加载配置的路径和配置信息 # pip confi

配置Kubernetes镜像源

配置 Kubernetes 镜像源

apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update

参考资料

Kubernetes集群加入Worker节点

在 Master 节点创建加入节点用的 Token

kubeadm token create --print-join-command
W1106 05:52:12.234596 1947512 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
kubeadm join 172.16.33.157:6443 --token xxx.yyyyyy     --discovery-token-ca-cert-hash sha256:zzzzzzzzzzzzzzzzzzzzzz

Worker 节点登录 root 用户

su - root

一键安装

apt-get install -y kubelet=1.18.3-00 kubeadm=1.18.3-00 kubectl=1.18.3-00

拉取 Worker 节点需要的基础镜像 kube_proxy_v=v1.18.3 docker pull kubesphere/kube-proxy:${kube_proxy_v} docker tag kubesphere/kube-proxy:${kube_proxy_v} k8s.gcr.

在Ubuntu上安装NVIDIA GPU驱动

在一台新安装的 Ubuntu20.04 系统上安装 NVIDIA GPU 驱动。

安装 gcc make 工具

$ sudo apt-get install gcc make

禁用系统默认驱动 nouveau

  1. 编辑配置文件
$ sudo nano /etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0
## 另一种方法
# cat << EOF >/etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0
EOF
  1. 更新 initramfs
$ sudo update-initramfs -u
  1. 重启系统
$ sudo reboot
  1. 验证 nouveau 是否禁用成功(当什么也不显示出来时代表成功)
$ lsmod | grep nouveau

安装 NVIDIA 驱动 查看显卡型号 $ lspci | grep -i nvidia 0000:43:00.0 3D controller: NVIDIA Corporation TU104GL [Tesla T4] (rev a1) 0000:47:00.

配置Docker镜像源

加速 Docker Hub 镜像拉取速度。

这里以阿里云镜像源:https://75oltije.mirror.aliyuncs.com 为例进行配置。

$ sudo nano /etc/docker/daemon.json
{
  "registry-mirrors": ["https://75oltije.mirror.aliyuncs.com"]
}
## 另一种方法()
cat << EOF >/etc/docker/daemon.json
{
  "registry-mirrors": ["https://75oltije.mirror.aliyuncs.com"]
}
EOF

重启 Docker daemon 服务

$ sudo systemctl restart docker

参考资料