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

如何知道docker谁占用的显卡的显存?

文章目录

  • python环境安装nvidia-htop
  • 查看pid
  • 加一个追踪
  • 总结一下【找到容器创建时间】
      • 使用说明
      • 示例
  • 再总结一下【用PID找到容器创建时间,从而找到谁创建的】
      • 使用说明
      • 示例

python环境安装nvidia-htop

nvidia-htop是一个看详细的工具。

pip3 install nvidia-htop

查看pid

指令是:

nvidia-smi | nvidia-htop.py -l

比如0卡有进程PID是3311673,是root占用。凡是USER里不是普通用户名的,都是docker run起来的容器在使用显存。如何查看3311673是谁在占用?
在这里插入图片描述

我们需要找到进程的 cgroup 文件,然后从 cgroup 文件中提取容器 ID。

找到进程的 cgroup 文件:

cat /proc/3311673/cgroup

在这里插入图片描述

容器id是923dc8979571a的这个容器,启动了进程3311673,占用了显存。容器的名字是daonan_sdxl。

在这里插入图片描述

这一步之后只有审计追溯了,或者可以从inspect里找一些信息确认一下。

docker inspect daonan_sdxl

在这里插入图片描述

查了一下:https://cloud.tencent.com/developer/ask/sof/115145807,使用docker 就相当于是匿名用户,docker本身不会记忆谁执行了它。

加一个追踪

在Docker中,直接通过Docker命令来追踪启动容器的具体用户是不太可能的,因为Docker并不会默认记录启动容器的用户信息。不过,可以通过以下一些方法来间接地追踪和记录相关信息:

创建文件:

touch /var/log/docker-commands.log
chmod 777 /var/log/docker-commands.log

进入这里:

cd /usr/bin/
mv docker docker-original

创建一个脚本 docker

vim docker

#!/bin/bash# 记录docker run命令
if [[ "$1" == "run" ]]; thenecho "$(date) - $(whoami) - $@" >> /var/log/docker-commands.log
fi# 执行docker命令
/usr/bin/docker-original "$@"

加权限:

sudo chmod +x /usr/bin/docker

ok!

总结一下【找到容器创建时间】

创建这个脚本:

#!/bin/bash# 检查是否提供了PID参数
if [ -z "$1" ]; thenecho "Usage: $0 <PID>"exit 1
fiPID=$1# 获取进程的cgroup文件内容
CGROUP_FILE="/proc/$PID/cgroup"if [ ! -f "$CGROUP_FILE" ]; thenecho "PID $PID does not exist or /proc/$PID/cgroup file not found."exit 1
fi# 提取容器ID
CONTAINER_ID=$(cat $CGROUP_FILE | grep 'docker' | sed 's/.*\///' | grep -o -E '[0-9a-f]{64}' | tail -n 1)if [ -z "$CONTAINER_ID" ]; thenecho "No Docker container found for PID $PID."exit 1
fi# 获取容器名称
CONTAINER_NAME=$(docker inspect --format '{{.Name}}' $CONTAINER_ID | sed 's/^\/\(.*\)/\1/')if [ -z "$CONTAINER_NAME" ]; thenecho "Failed to retrieve container name for container ID $CONTAINER_ID."exit 1
fi# 获取容器创建时间
CONTAINER_CREATED=$(docker inspect --format '{{.Created}}' $CONTAINER_ID)if [ -z "$CONTAINER_CREATED" ]; thenecho "Failed to retrieve creation time for container ID $CONTAINER_ID."exit 1
fi# 输出结果
echo "Container ID: $CONTAINER_ID"
echo "Container Name: $CONTAINER_NAME"
echo "Container Created: $CONTAINER_CREATED"exit 0

使用说明

  1. 将上述脚本保存为 find_container_by_pid.sh
  2. 给脚本添加执行权限:
    chmod +x find_container_by_pid.sh
    
  3. 运行脚本并传入一个PID:
    ./find_container_by_pid.sh <PID>
    

示例

./find_container_by_pid.sh 3311673

该脚本将会输出指定PID对应的容器ID、容器名称和容器创建时间。

在这里插入图片描述

再总结一下【用PID找到容器创建时间,从而找到谁创建的】

可以通过编写一个新的Shell脚本来实现这个功能。这个脚本将会基于容器的创建时间,从日志文件 /var/log/docker-commands.log 中查找对应的记录。以下是这个新脚本的实现:

#!/bin/bash# 检查是否提供了PID参数
if [ -z "$1" ]; thenecho "Usage: $0 <PID>"exit 1
fiPID=$1# 调用之前的脚本来获取容器ID、名称和创建时间
container_info=$(./find_container_by_pid.sh $PID)
if [ $? -ne 0 ]; thenecho "Failed to get container info for PID $PID."exit 1
fi# 提取容器创建时间和容器ID
CONTAINER_CREATED=$(echo "$container_info" | grep "Container Created:" | awk '{print $3}')
CONTAINER_ID=$(echo "$container_info" | grep "Container ID:" | awk '{print $3}')echo $CONTAINER_ID# 将创建时间转换为前后1秒的时间范围
start_time=$(date -d "$(echo $CONTAINER_CREATED | sed 's/Z//') -1 second" +"%Y-%m-%dT%H:%M:%S")
end_time=$(date -d "$(echo $CONTAINER_CREATED | sed 's/Z//') +1 second" +"%Y-%m-%dT%H:%M:%S")# 从日志文件中查找对应时间范围的记录
log_file="/var/log/docker-commands.log"
if [ ! -f "$log_file" ]; thenecho "Log file $log_file not found."exit 1
fiecho "Searching for logs between $start_time and $end_time"
log_entries=$(grep -E "$start_time|$end_time" $log_file)# 打印结果
if [ -z "$log_entries" ]; thenecho "No log entries found for the specified time range."
elseecho "Log entries found:"echo "$log_entries"echo ""echo "Container Creator and ID:"echo "$log_entries" | while read -r line ; docreator=$(echo $line | awk '{print $4}')echo "Creator: $creator, Container ID: $CONTAINER_ID"done
fiexit 0

使用说明

  1. 确保之前的脚本 find_container_by_pid.sh 是可执行的,并且路径正确。
  2. 将上述新脚本保存为 find_container_creator.sh
  3. 给新脚本添加执行权限:
    chmod +x find_container_creator.sh
    
  4. 运行新脚本并传入一个PID:
    ./find_container_creator.sh <PID>
    

示例

./find_container_creator.sh 3311673

该脚本将会基于容器的创建时间,从日志文件 /var/log/docker-commands.log 中查找对应时间范围的记录,并打印出来。希望这个新脚本能满足你的需求。

相关文章:

如何知道docker谁占用的显卡的显存?

文章目录 python环境安装nvidia-htop查看pid加一个追踪总结一下【找到容器创建时间】使用说明示例 再总结一下【用PID找到容器创建时间&#xff0c;从而找到谁创建的】使用说明示例 python环境安装nvidia-htop nvidia-htop是一个看详细的工具。 pip3 install nvidia-htop查看…...

wps linux node.js 加载项开发,和离线部署方案

环境准备 windwos 安装node.js 安装VSCode 安装wps linux 安装node.js 安装VSCode 安装wps 通过npm 安装wpsjs SDK 使用npm安装wpsjs npm install -g wpsjs 创建一个项目 wpsjs create WPS-Addin-PPT 创建项目会让你选择2个东西&#xff1a; 1&#xff1a;选择你的文…...

红队内网攻防渗透:内网渗透之内网对抗:横向移动篇Kerberos委派安全非约束系约束系RBCD资源系Spooler利用

红队内网攻防渗透 1. 内网横向移动1.1 委派安全知识点1.1.1 域委派分类1.1.2 非约束委派1.1.2.1 利用场景1.1.2.2 复现配置:1.1.2.3 利用思路1:诱使域管理员访问机器1.1.2.3.1 利用过程:主动通讯1.1.2.3.2 利用过程:钓鱼1.1.2.4 利用思路2:强制结合打印机漏洞1.1.2.5 利用…...

nginx上传文件限制

默认限制 Nginx 限制文件大小可以通过 client_max_body_size 指令来设置&#xff0c;该指令通常在 http、server 或 location 块中设置&#xff0c;如果不设置&#xff0c;默认上传大小为1M。 修改上传文件限制 要修改Nginx的文件上传大小限制&#xff0c;你需要编辑Nginx的配…...

76. 最小覆盖子串(困难)

76. 最小覆盖子串 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转&#xff1a;76. 最小覆盖子串 2.详细题解 在s中寻找一个最短的子串&#xff0c;使之包含t中的所有字符&#xff0c;t中可能存在多个相同字符&#xff0c;寻找的子串也应至少含有…...

K8S 集群节点扩容

环境说明&#xff1a; 主机名IP地址CPU/内存角色K8S版本Docker版本k8s231192.168.99.2312C4Gmaster1.23.1720.10.24k8s232192.168.99.2322C4Gwoker1.23.1720.10.24k8s233&#xff08;需上线&#xff09;192.168.99.2332C4Gwoker1.23.1720.10.24 当现有集群中的节点资源不够用&…...

AI大模型技术在音乐创造的应用前景

大模型技术在音乐创作领域具有广阔的应用前景&#xff0c;可以为音乐家、作曲家和音乐爱好者提供以下方面的帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 音乐创作辅助&#xff1a;大模型可以帮助音乐家和作曲家生成旋律、和声…...

Linux多进程和多线程(一)-进程的概念和创建

进程 进程的概念进程的特点如下进程和程序的区别LINUX进程管理 getpid()getppid() 进程的地址空间虚拟地址和物理地址进程状态管理进程相关命令 ps toppstreekill 进程的创建 并发和并行fork() 父子进程执行不同的任务创建多个进程 进程的退出 exit()和_exit() exit()函数让当…...

熊猫烧香是什么?

熊猫烧香&#xff08;Worm.WhBoy.cw&#xff09;是一种由李俊制作的电脑病毒&#xff0c;于2006年底至2007年初在互联网上大规模爆发。这个病毒因其感染后的系统可执行文件图标会变成熊猫举着三根香的模样而得名。熊猫烧香病毒具有自动传播、自动感染硬盘的能力&#xff0c;以及…...

使用Vue3和Tailwind CSS快速搭建响应式布局

### 第一部分&#xff1a;初始化Vue3项目并安装Tailwind CSS 首先&#xff0c;在你的开发环境中打开终端&#xff0c;然后通过Vue CLI来创建一个新的Vue3项目。输入如下命令&#xff1a; vue create my-vue-app 按照提示选择Vue3的相关选项&#xff0c;创建完毕后&#xff0…...

J019_选择排序

一、排序算法 排序过程和排序原理如下图所示&#xff1a; 二、代码实现 package com.itheima.sort;import java.util.Arrays;public class SelectSort {public static void main(String[] args) {int[] arr {5, 4, 3, 1, 2};//选择排序for (int i 0; i < arr.length - 1…...

【linux】vim的使用

目录 一、Vim的基本模式 二、Vim的常见命令 三、Vim的高级用法 四、Vim的进阶使用技巧 在Linux系统中&#xff0c;Vim是一款功能强大的文本编辑器&#xff0c;特别适用于程序员的代码编辑和修改。以下是Vim的详细使用教程&#xff0c;包括其基本模式、常见命令和高级用法。…...

【工具测评】ONLYOFFICE8.1版本桌面编辑器测评:好用!

随着远程工作的普及和数字化办公的发展&#xff0c;越来越多的人开始寻找功能强大、易于使用的办公软件。在这个背景下&#xff0c;ONLYOFFICE 8.1应运而生&#xff0c;成为许多用户的新选择。ONLYOFFICE 8.1是一款办公套件软件&#xff0c;提供文档处理、电子表格和幻灯片制作…...

核方法总结(四)——高斯过程回归学习笔记

一、定义 基于核方法的线性回归模型和传统线性回归一样&#xff0c;可以用未知数据进行预测&#xff0c;但不能确定 预测的可信度。在参考书第二章中可知&#xff0c;基于贝叶斯方法可以实现对未知数据依概率预测&#xff0c;进而可得到预测的可信度。这一方法中&#xff0c;通…...

【Python3的内置函数和使用方法】

目录 Python 特点 Python 中文编码 Python 变量类型 Python列表 Python 元组 元组是另一个数据类型&#xff0c;类似于 List&#xff08;列表&#xff09; Python 字典 Python数据类型转换 Python 运算符 Python算术运算符 Python比较运算符 Python赋值运算符 Pyt…...

递推算法计算信号特征

在线算法&#xff08;在线计算或递推计算&#xff09;能够在不存储全部数据的情况下逐步更新信号的特征信息&#xff0c;非常适合资源受限的单片机应用场景。 用途&#xff1a;单片机边采集&#xff21;&#xff24;&#xff23;边计算&#xff0c;最终将采集的信号特征计算结果…...

spring-boot-configuration-processor注释处理器

开源项目SDK&#xff1a;https://github.com/mingyang66/spring-parent 个人文档&#xff1a;https://mingyang66.github.io/raccoon-docs/#/ spring-boot-configuration-processor是springboot提供的一个注释处理器&#xff08;annotation processor&#xff09;,它用于在编译…...

Python和MATLAB粘性力接触力动态模型半隐式欧拉算法

&#x1f3af;要点 &#x1f3af;运动力模型计算制作过程&#xff1a;&#x1f58a;相机捕捉网球运动图&#xff0c;制定运动数学模型&#xff0c;数值微分运动方程 | &#x1f58a;计算运动&#xff0c;欧拉算法离散积分运动&#xff0c;欧拉-克罗默算法微分运动方程 &#…...

webstorm无法识别tsconfig.json引用项目配置文件中的路径别名

问题 vite项目模板中&#xff0c;应用的ts配置内容写在tsconfig.app.json文件中&#xff0c;并在tsconfig.json通过项目引用的方式导入 {"files": [],"references": [{"path": "./tsconfig.app.json"},{"path": "./t…...

qiankun微前端:qiankun+vite+vue3+ts(未完待续..)

目录 什么是微前端 目前现有的微前端 好处 使用 子应用的页面在主应用里显示 什么是微前端 微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 web 应用的技术手段及方法策略。 我的理解就是将一个大型的前端应用拆分成多个模块&#xff0c;每个微前端模块可以由…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

uniapp 小程序 学习(一)

利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 &#xff1a;开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置&#xff0c;将微信开发者工具放入到Hbuilder中&#xff0c; 打开后出现 如下 bug 解…...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)

第一篇&#xff1a;Liunx环境下搭建PaddlePaddle 3.0基础环境&#xff08;Liunx Centos8.5安装Python3.10pip3.10&#xff09; 一&#xff1a;前言二&#xff1a;安装编译依赖二&#xff1a;安装Python3.10三&#xff1a;安装PIP3.10四&#xff1a;安装Paddlepaddle基础框架4.1…...