使用Linux系统,如果出现:资源暂时不可用的错误。一般是因为系统资源紧张或者系统限制被触发。如:文件描述符限制、进程数限制、内存不足、锁定文件或进程、网络资源限制等。这些都可能导致Linux系统提示资源暂时不可用。
如果是文件描述符的限制,进程可能达到文件描述符限制,首先检查文件描述符限制,Linux中对进程运行打开的额最大文件描述符数都是有限制的,查看命令为:
ulimit -n
临时修改文件描述符限制:
ulimit -n 65536
永久修改文件描述符限制,修改 /etc/security/limits.conf 文件,添加或修改以下行:
* soft nofile 65536
* hard nofile 65536
然后在 /etc/pam.d/common-session 和 /etc/pam.d/common-session-noninteractive 添加以下行(如果尚未存在):
session required pam_limits.so
检查进程数限制,每个用户在系统上可以运行最大进程数也受限制,查看方法如下:
ulimit -u
以上命令可以查看当前限制,临时修改进程数限制:
ulimit -u 4096
永久修改进程数限制,同样修改 /etc/security/limits.conf 文件,添加或修改以下行:
* soft nproc 4096
* hard nproc 4096
检查系统内存使用情况,内存不足会导致许多资源不可用问题,可以通过以下命令检查内存使用情况:
free -h
释放内存:
sudo sysctl -w vm.drop_caches=3
添加交换空间,当物理内存不足,利用交换空间的添加可以减轻内存压力:
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
然后将其添加到 /etc/fstab 以便重启后自动挂载:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
检查系统日志,可以更快找出问题所在,查看当前系统日志方法:
sudo tail -f /var/log/syslog
dmesg 日志:
dmesg | tail
应用程序日志:具体日志文件位置可能根据应用程序而有所不同。
当某个进程占用了资源而未释放,可能会导致其他进程无法使用,可以使用以下工具查找或者终止占用资源的进程。使用 lsof 查看打开的文件:
lsof | grep <文件名>
用 fuser 查看哪个进程占用了文件:
fuser -v <文件路径>
杀死占用资源的进程:
kill -9 <进程ID>
检查网络资源限制
如果网络资源不足,如端口或套接字资源被占用,可以使用以下方法检查和释放,检查打开的套接字:
ss -s
增加系统允许的最大文件描述符数,
编辑 /etc/sysctl.conf,添加以下行:
net.core.somaxconn = 1024
net.ipv4.ip_local_port_range = 1024 65000
应用更改:
sudo sysctl -p
检查 CPU 使用情况,高 CPU 使用率可能导致系统资源不足。可以使用以下命令查看 CPU 使用情况,使用 top 命令:
top
使用 htop 命令(如果已安装):
htop
查找占用 CPU 的进程并终止:
kill -9 <进程ID>
检查磁盘空间,确保磁盘空间充足,尤其是 /tmp 和 /var 分区:
df -h
清理不必要的文件:
sudo apt-get clean
sudo rm -rf /var/log/*.gz /var/log/*.1
检查swap,确保有足够的 Swap 空间来缓解内存压力:
swapon -s
以上为解决资源暂时不可用的方法,欢迎大家继续关注华纳云了解更多技术点!