- 问题记录
- 释放显存或端口
- pycharm带指令运行,替代.sh指令运行
- pycharm相对路径出错
- Linux服务器创建新用户
- 灰屏处理
- 针对初始用户
- 针对使用过程中出现灰屏
- 情况一
- 情况二
- 软连接
- Linux 服务器之间文件传输
- 参考博客或文章
本博客为我使用服务器所遇到的常见问题汇总
释放显存或端口- 通过nvidia-msi查看服务器显存情况。
- 最常见情况是存在未停止进程,确认该进程未使用后,可利用kill -9 PID 命令直接释放。
- 复杂情况为,通过nvidia-msi未发现进程占用,或通过第二步后仍未释放显存,这时需要使用命令fuser -v /dev/nvidia*查看僵尸进程
- 查看进程的指令还有 ps -ef
- 再利用kill -9 PID PID PID,可批量杀死僵尸进程,完成显存释放。
- 使用python -m torch.distributed.launch进行多GPU训练时,出现端口占用RuntimeError: Address already in use报错也属于上述情况,可使用上述方法解决。
- 批量清理显卡中残留进程:
sudo fuser -v /dev/nvidia* |awk '{for(i=1;i<=NF;i++)print "kill -9 " $i;}' | sudo sh
清理指定GPU显卡中残留进程,如GPU 2:
sudo fuser -v /dev/nvidia2 |awk '{for(i=1;i<=NF;i++)print "kill -9 " $i;}' | sudo sh
有些开源程序常使用类似sh train.sh在shell下完成程序运行,这样虽然方便简洁,但是不利于修改代码后debug出现的问题,因此需要借助pycharm等编辑器。
操作如图所示,将torch分布式命令作为script路径配置,其他参数统一到参数配置下
遇到相对路径出错的情况,请注意检查Debug Configuration配置下的工作目录(Working Directory)是否正确
另外在Settings-Project-Project Structure下将文件目录加入到Sources下,也可在主界面下选中右键Mark Directory as Sources完成同样操作
Linux服务器上创建账户用到useradd命名,一般常用以下命令:
$sudo useradd -m -s /bin/bash userName // 在/home目录下新建userName目录
$sudo passwd userName //设置密码
会提示
Enter new UNIX password: Retype new UNIX password: passwd:password updated successfully
然后用新建的用户名和密码先登录服务器,不会出现界面,退出之后用管理员账号登录。
下面三个命令一般用不到,意思是在新建中不需要这三个命令,直接到配置桌面会话文件这一步。
$userdel -r userName //删除用户
$useradd userName //创建用户
$useradd -d /home/homeDir userName //增加home目录
因为登录自己新建的用户之后不会出现桌面,而是灰色的画面,需要配置桌面会话文件,需要先sudo su进入root,进入新建用户的路径下,比如/home/XXX。
$echo xfce4-session>.xsession
$cat .xsession
创建成功之后会出现以下文件和一行命令xfce4-session
完成上述步骤后配置VNCSERVER,配置和重启都需要带端口号
创建初始用户时,可能登录vnc灰屏(不提示错误),这时一般是xsartup未配置桌面导致
修改xstartup文件
将x-window-manager &注释掉
增加mate-session &
使用vncserver -kill :1(共用服务器务必带端口号)命令重启VNCviewer后由bashrc中anaconda未注释造成的灰屏情况只需要注释修改bashrc相应部分执行重启步骤即可
情况二VNC错误描述
vnc viewer开启后弹窗提示
Could not connect to session bus:
Failed to connect to socket /tmp/dbus-XXXXXXXXXX:
Connection refused
关闭弹窗后又提示
Could not acquire name on session bus
问题分析
一般情况下为错误使用vncserver -kill命令造成了~文件夹下的配置文件损坏.
修复方法
因为无法登陆图形界面, 所以在ssh下修复, 具体方法如下:
登陆ssh, 关闭自己开启的vncserver进程
备份~文件夹下重要的隐藏文件, 如.bashrc文件
cp ~/.bashrc ~/bashrc.bak
删除~文件夹下所有隐藏文件
rm -rf ~/.*
输入exit登出账户, 再重新登陆ssh
重置~文件夹下的默认配置文件
cp -r /etc/skel/. /home/usrname
输入exit登出账户, 再重新登陆ssh
如果出现端口被占用无法kill端口
- 可能其他子账户错误登录端口,导致复用,使用其他账户退出,再kill后重启vnc即可。
- 未出现其他端口占用,可能是端口锁定导致,删除/tmp/路径下和/tmp/.X11-unix/路径下的对应端口。
- 使用命令ps aux | grep XXX 命令寻找Xvnc4 相关的进程kill后重启端口vnc即可。
这是linux中一个非常重要命令,请大家一定要熟悉。它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,
具体用法是:ln -s 源文件 目标位置
不论是硬连结或软链结都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。
-f : 链结时先将与 dist 同档名的档案删除 -d : 允许系统管理者硬链结自己的目录 -i : 在删除与 dist 同档名的档案时先进行询问 -n : 在进行软连结时,将 dist 视为一般的档案 -s : 进行软链结(symbolic link) -v : 在连结之前显示其档名 -b : 将在链结时会被覆写或删除的档案进行备份 -S SUFFIX : 将备份的档案都加上 SUFFIX 的字尾 -V METHOD : 指定备份的方式
如果要删除软连接,直接删除刚刚新建的目标文件就好了。
或者使用删除软连接指令:sudo unlink 目标位置 或 rm 目标位置
linux的scp命令:
scp就是secure copy的简写,用于在linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器.
有时我们需要获得远程服务器上的某个文件,该服务器既没有配置ftp服务器,也没有做共享,无法通过常规途径获得文件时,只需要通过简单的scp命令便可达到目的。
1、将本机文件复制到远程服务器上
命令:
scp file_path_1 root@192.168.1.1:file_path_2
例子:
scp /home/administrator/news.txt root@192.168.1.1:/etc/squid
说明:
file_path_1:本地文件的绝对路径
root:表示通过root用户登录到远程服务器(也可以是目标服务器的其他用户)
192.168.1.1:目标服务器的ip地址
file_path_2:要存储在目标服务器的地址(目录)
步骤:
首先会提示输入yes or no 建立ssh链接
按照提示输入登录用户的密码
然后会显示百分比开始复制文件、实际时间和传送速度等信息
2、将远程服务器上的文件复制到本地
命令:
scp root@192.168.1.1:file_path_1 file_path_2
例子:
scp remote@www.abc.com:/usr/local/sin.sh /home/administrato
说明:
root:表示通过root用户登录到远程服务器(也可以是远程服务器的其他用户)
192.168.1.1:是服务器的ip,当然也可以是网址。
file_path_1:表示的是欲复制到本机的位于远程服务器上的文件
file_path_2:表示的是将远程文件复制到本地的绝对路径
注意两点:
1.如果远程服务器防火墙有特殊限制,scp便要走特殊端口,具体用什么端口视情况而定,命令格式如下:
#scp -p 4588 remote@www.abc.com:/usr/local/sin.sh /home/administrator
2.使用scp要注意所使用的用户是否具有可读取远程服务器相应文件的权限。
附加:
scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读 read only system时,用scp可以帮你把文件移出来。另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。
1.命令格式:
scp [参数] [原路径] [目标路径]
2.命令功能:
scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。linux的scp命令可以在linux服务器之间复制文件和目录。
3.命令参数:
-1 强制scp命令使用协议ssh1 -2 强制scp命令使用协议ssh2 -4 强制scp命令只使用IPv4寻址 -6 强制scp命令只使用IPv6寻址 -B 使用批处理模式(传输过程中不询问传输口令或短语) -C 允许压缩。(将-C标志传递给ssh,从而打开压缩功能) -p 保留原文件的修改时间,访问时间和访问权限。 -q 不显示传输进度条。 -r 递归复制整个目录。 注:当复制目录的时候用这个 -v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。 -c cipher 以cipher将数据传输进行加密,这个选项将直接传递给ssh。 -F ssh_config 指定一个替代的ssh配置文件,此参数直接传递给ssh。 -i identity_file 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。 -l limit 限定用户所能使用的带宽,以Kbit/s为单位。 -o ssh_option 如果习惯于使用ssh_config(5)中的参数传递方式, -P port 注意是大写的P, port是指定数据传输用到的端口号 -S program 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。
4.使用实例:
scp命令的实际应用概述:
从本地服务器复制到远程服务器:
(1) 复制文件:
命令格式:
scp local_file remote_username@remote_ip:remote_folder
或者
scp local_file remote_username@remote_ip:remote_file
或者
scp local_file remote_ip:remote_folder
或者
scp local_file remote_ip:remote_file
第1,2个指定了用户名,命令执行后需要输入用户密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名
第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名
(2) 复制目录:
命令格式:
scp -r local_folder remote_username@remote_ip:remote_folder
或者
scp -r local_folder remote_ip:remote_folder
第1个指定了用户名,命令执行后需要输入用户密码;
第2个没有指定用户名,命令执行后需要输入用户名和密码;
从远程服务器复制到本地服务器:
从远程复制到本地的scp命令与上面的命令雷同,只要将从本地复制到远程的命令后面2个参数互换顺序就行了。
实例1:从远处复制文件到本地目录
命令:
scp root@192.168.120.204:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/
参考博客或文章https://blog.csdn.net/weixin_37182342/article/details/80298464
https://www.cnblogs.com/qxym2016/p/8542186.html



