
# 查看哪些进程占用swap for i in $(ls /proc|grep -E ^[0-9]$);do awk /Swap:/{s$2}END{print $i,s/1024MB} /proc/$i/smaps 2/dev/null;done|sort -k2 -nr dmesg -T | grep -i oom # 持续监控内存变化 watch -n1 free -h # 看top两个swap进程是什么 ps -ef |grep -E 2979|2973 # 看进程内存完整状态(RSS/VMSwap) cat /proc/2979/status |grep -E VmRSS|VmSwap cat /proc/2973/status |grep -E VmRSS|VmSwap # 看系统整体swap概况 free -h swapon --show # 看系统内存回收、swapin/out事件 vmstat 1 # 看OOM与kswapd内核日志 dmesg -T |grep -E kswapd|OOM #!/bin/bash for pid in /proc/[0-9]*; do pid${pid##*/} awk /Swap:/{s$2}END{print $pid, s/1024} /proc/$pid/smaps 2/dev/null done | sort -k2 -nr swap_pid.txt 境Docker宿主机看到 PID想定位是哪个容器。 ## 方法 1lsns 看 pid 所属 net namespace最简单 lsns -t net -p 宿主机PID 拿到NS编号再匹配容器的 net ns。 或者直接看进程的 namespace 链接 readlink /proc/PID/ns/net # 输出类似 net:[4026532421] 然后遍历容器找对应 net inode for c in $(docker ps -q); do echo $c $(docker inspect --format {{.NetworkSettings.SandboxKey}} $c) done SandboxKey 里面路径末尾的数字就是 net ns inode对上就是对应容器。 ## 方法 2docker top已知容器看内部进程 docker top 容器ID/名称 注意docker top显示的是**宿主机 PID**。 ## 方法 3通过 /proc/pid/cgroup 定位最常用 宿主机拿到进程 PID cat /proc/PID/cgroup 输出会有类似 12:cpuset:/docker/xxxxxxx 11:memory:/docker/xxxxxxx /docker/后面那串字符串就是**容器完整 ID**直接 docker inspect xxxxxxx 如果是 k8s containerdcgroup 路径会是 /kubepods/.../xxx那是 pod ID。 ### 一键脚本输入宿主机 PID直接输出容器名 PID12345 cid$(cat /proc/$PID/cgroup | grep -oP docker/\K[0-9a-f] | head -1) if [ -n $cid ];then docker ps --filter id${cid} else echo 该进程不属于docker容器 fi #!/bin/bash pid_list( 34441 1052 48060 29241 1044 29442 29231 1062 19297 1054 417 31777 1058 29443 52698 65943 70783 28803 42936 43035 54594 43036 42998 24882 28759 18159 28771 28820 28819 2975 69839 29239 50024 28767 26841 42995 26819 26845 9272 25989 26846 2360 57012 57020 1099 54994 57137 65122 42517 45762 49176 43514 1160 68148 70689 65061 1317 27738 65845 1449 25059 60694 56463 8754 20724 65123 65396 5191 4280 3302 1347 22809 5199 48971 47945 5225 2976 52753 67991 71106 57161 71114 71183 31449 57141 70573 57146 57145 7106 39412 65192 58401 31418 2974 34557 30045 1320 8803 31590 6921 22698 18067 22706 18015 3325 19281 53473 66696 10377 57735 16320 27017 11343 18068 18075 1958 34917 22718 22721 2053 61323 49466 61598 61977 ) printf %-8s %-16s %-14s %s\n PID RSS 归属 命令行 printf \n for pid in ${pid_list[]}; do if [[ ! -d /proc/${pid} ]]; then printf %-8s %-16s %-14s %s\n ${pid} gone [DEAD] 进程已消失 continue fi rss_kb$(awk /VmRSS/ {print $2} /proc/${pid}/status) rss_mb$(echo scale2; ${rss_kb}/1024 | bc) cgroup$(head -n1 /proc/${pid}/cgroup) if [[ ${cgroup} ~ docker || ${cgroup} ~ kubepods ]]; then belong容器进程 else belong宿主机裸进程 fi cmd$(cat /proc/${pid}/cmdline | tr \0 | cut -c1-90) printf %-8s %-16s %-14s %s\n ${pid} ${rss_mb}MB ${belong} ${cmd} done debug true insecure-entitlements [network.host, security.insecure] [registry.harbor.dev.ai-finance.cn] http true # 删除旧builder docker buildx rm armbuilder # 确保toml没有windows换行 dos2unix /home/buildkitd.toml # 创建builder加载修正后的toml docker buildx create --name armbuilder \ --driver docker-container \ --driver-opt networkhost \ --buildkitd-config /home/buildkitd.toml \ --platform linux/amd64,linux/arm64 # bootstrap启动 docker buildx inspect armbuilder --bootstrap docker buildx use armbuildertar czvf - -C arm2.5/ .|split -d -b 1G - cv.tar.gzcat cv.tar.gz* | tar -zxvf - -C ./