Linux 相关问题

xshell 连接虚拟机安装的 Linux 慢

1
2
3
4
5
6
#ssh的服务端在连接时会自动检测dns环境是否一致导致响应慢
vi /etc/ssh/sshd_config
UseDNS yes #默认为注释行
UseDNS no #把注释打开,然后重启ssh服务即可

/bin/systemctl restart sshd.service

Centos Yum install 提示 Could not resolve host: mirrors.shuosc.org; Unknown error

http://mirrors.shuosc.org/centos/7.4.1708/os/x86_64/repodata/repomd.xml: [Errno 14] curl#6 - "Could not resolve host: mirrors.shuosc.org; Unknown error"
原因:DNS服务器错误

1
2
3
vi /etc/resolv.conf
#新增一个DNS
nameserver 218.85.157.99

Linux磁盘空间被未知资源耗尽

在Linux中, 当使用rm在linux上删除了大文件, 但是如果有进程打开了这个大文件, 却没有关闭这个文件的句柄, 那么 linux 内核还是不会释放这个文件的磁盘空间, 最后造成磁盘空间占用100%, 整个系统无法正常运行, 这种情况下, 通过 dfdu 命令查找的磁盘空间, 两者是无法匹配的, 可能 df 显示磁盘 100%, 而 du 查找目录的磁盘容量占用却很小, 遇到这种情况, 基本可以断定是某些大文件被某些程序占用了, 并且这些大文件已经被删除了, 但是对应的文件句柄没有被某些程序关闭, 造成内核无法收回这些文件占用的空间, 使用 lsof -n | grep deleted 命令, 打印出所有针对已删除文件的读写操作, 这类操作是无效的, 也正是磁盘空间莫名消失的根本原因, 使用 kill -9 PID 只需把进程删掉就能释放空间

Failed: No space left on device 问题 (磁盘空间满了或 磁盘的 Inode usage [索引节点] 耗尽)
举个PHP碰到的问题, a 页面设置 session 后, b 页面无法获取, 即无法生成session文件

  1. 运行 df -lh, 发现磁盘并没有满
  2. 运行 df -i, 发现 /dev/vda1Inodes 已经耗尽
  3. 运行 du -sh * 看哪个目录占用空间大, 再使用 ls | wc -l 查看目录下的文件, 删除文件即可
  4. 目前仅在两种情况下发现 Inode usage 耗尽
    1
    2
    3
    4
    5
    6
    #1. /tmp 下的 session 文件过多
    #2. /var/spool/clientmqueue 文件过多, 如果系统中有用户开启了 cron, 而 cron 执行的程序有输出内容, 输出内容会以邮件的形式发给 cron 的用户,
    #而 sendemail 没有启动所以就产生了这些文件, 为防止这种情况出现, 在 cron 的自动执行语句后加上 > /dev/null 2>&1
    例:*/1 * * * * /bin/sh mscron.sh > /dev/null 2>&1
    当 clientmqueue 文件过多时, 使用 "rm -rf *" 时候会提示"-bash:/bin/rm:Argument list too long" 意思是参数大长, rm 干不了,
    可以用 "ls | xargs rm -f" 命令删除

firewalld 问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 问题
Active: failed (Result: timeout)
# 解决
systemctl stop firewalld
pkill -f firewalld
systemctl start firewalld

# 问题
WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuration option. It will be removed in a future release. Please consider disabling it now.
# 解决
vim /etc/firewalld/firewalld.conf
AloowZoneDrifting=no

# 问题
Failed to start firewalld.service: Unit is masked.
# 解决
systemctl unmask firewalld
systemctl start firewalld
0%