linux服务器资源管理(磁盘、内存、计算时长、cpu、gpu)以及当中遇到的一些问题

本文系统版本:ubuntu20.04
应实验室要求,对连接服务器的用户进行资源管理。

磁盘
根据下面的这个链接中的内容来做即可。
linux(ubuntu)磁盘配额(quota命令)
如果你需要对ubuntu的用户进行批量的磁盘配额配置的话,请不要指望使用group进行集体配置。
如果你对一个group进行磁盘配额配置,操作的是一个group中所有用户的总额,并不会对group下属的每个用户进行单独的磁盘配额限制。
如果你希望能进行批量操作的话,请参考下面的博客。
linux批量设置用户磁盘配额
只是这个博客比较乱,不想看的同学,可以看着我的实际操作代码来写!

awk -F: '{ if($3>=1002 && $1!="nobody") print $1}' /etc/passwd |xargs sudo edquota -p 模板用户

内存
下面链接只测试了限制内存部分。
Linux系统限制普通用户内存使用(ulimit)和硬盘配额空间(quota)
计算时长
编写shell脚本,通过crontab命令进行定时杀死超过时长的代码。
linux终止超时的进程
Linux crontab 命令
如:需求为“杀死24小时的python程序”

#!/bin/bash
function show_elapsed_time()
{
    user_hz=$(getconf CLK_TCK) #mostly it's 100 on x86/x86_64
    pid=$1
    jiffies=$(cat /proc/$pid/stat | cut -d" " -f22)
    sys_uptime=$(cat /proc/uptime | cut -d" " -f1)
    last_time=$(( ${sys_uptime%.*} - $jiffies/$user_hz ))
    #echo "the process $pid lasts for $last_time seconds."
    time_out=86400 #限制为 24 小时
    if [ "$last_time" -ge "$time_out" ]
    then
        echo "the process $pid lasts for $last_time seconds."
        kill -9 $pid
    fi
}
#pgrep php 用于返回进程名包含 python 字符的进程ID列表
for pid in `pgrep python`
do
    #echo 'It is '$pid  
    show_elapsed_time $pid
 
done

cpu占用比
目标是控制用户的cpu占用比。
可以使用cpulimit和shell脚本来解决。
思路是通过top获取用户的cpu占用比和pid,然后将用户所有进程的占用比相加,查看是否超过限制,如超过,则抑制该进程的cpu使用量。
具体代码就不放出了。主要是怕师弟师妹们太厉害,挖我程序的bug。

gpu显存控制
控制用户的显卡使用量。
思路为:
1、通过nvidia-smi 获取cpu信息
2、提取进程中的pid和占用显存
3、通过ps命令获取pid和用户名
4、同用户名的显存相加,看是否超出限制,如超出,将超出部分的pid返回。
5、将返回的pid进行杀死。
具体代码就不放出了。这里只放出部分代码。

需求如下:
不允许存在占用超过10gb显存的进程
思路:
1、通过nvidia-smi 获取cpu信息
2、提取进程中的pid和占用显存
3、根据占用显存是否符合要求,返回pid

首先,保存当前显卡信息。

nvidia-smi -f gpu_information.txt

然后通过Python文件筛选pid号

这个就自己写吧,也不难

最后编写shell脚本,根据pid号删除对应的进程。

#!/bin/sh
cat violation_pid.txt while read line
do
  kill -9 $line
done

过程中遇到的问题:
(1)如果看别的教程,修改etc/fstab文件,导致无法进入图形界面。可能是磁盘挂载出现了问题。

解决方法:按ctrl+alt+f2进入tty2,然后登录,进入系统,
删除你对fstab文件的修改。

(2)如果你根据教程分区之后,导致无法进入图形界面。可能是可能还是磁盘挂载出现了问题。

解决方法:按ctrl+alt+f2进入tty2,然后登录。分区之后,
导致可能UID有所变化,因此需要找到新分区的UID,根据这个
UID更新fstab文件中的UID。
如:我分区之后,将/dev/sdb1的UID弄乱了,然后去fstab
文件中修改对应代码行的UID即可。
其次,如果你挂载之后,还是无法进入图形界面,那可能是因为
你格式化磁盘了,导致home目录下无用户文件了,你可以尝试
adduser一个新用户,然后用新用户去登陆图形界面。

(3)如果你修改login文件后,导致无法进入图形界面,tty2命令行,也无法进入系统。

解决方法:使用单用户模式进入系统,然后删除你在login文件
中,做的修改即可。(注:进入单用户模式的最后一步,我当时
并未修改recovery mode 内容,选择的直接进入。)

Ubuntu 20 按ESC进入单用户模式 single user mode

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值