AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 663824
Accepted
Kzqai
Kzqai
Asked: 2015-01-31 13:08:40 +0800 CST2015-01-31 13:08:40 +0800 CST 2015-01-31 13:08:40 +0800 CST

设备错误上没有剩余空间,但 df 报告有更多可用空间

  • 772

我使用 Apache2 在我的 Debian 网络服务器上的 PHP 会话mod_php似乎随机失败,说没有空间来编写它们:

sudo tail -60 /var/log/apache2/error.log
[Fri Jan 30 15:55:35 2015] [error] [client xxx.xxx.xxx.xxx] PHP Warning:  session_start() [<a href='function.session-start'>function.session-start</a>]: open(/tmp/sess_555555555555555555, O_RDWR) failed: No space left on device (28) in /path/to-first-session-use/core/bootstrap.php on line 18

当我尝试:

ls /tmp

它只是永远挂起,所以这很糟糕。

但是当我检查可用空间并检查 inode 使用是否合理时......

$ df -h

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             150G  121G   22G  85% /
tmpfs                 2.0G     0  2.0G   0% /lib/init/rw
udev                   10M   16K   10M   1% /dev
tmpfs                 2.0G  4.0K  2.0G   1% /dev/shm

$ df -i

Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1            19922944 11143605 8779339   56% /
tmpfs                 513524       4  513520    1% /lib/init/rw
udev                  513524     135  513389    1% /dev
tmpfs                 513524       3  513521    1% /dev/shm

数字看起来不错。当然,85% 比我想要的多,但不是 99% 或任何东西。

我怀疑这是一个问题,因为 5 年没有重新启动机器,并且可能创建了很多小文件,但我得到的 inode 信息有点矛盾。我应该在哪里调查?

编辑:

ls -l /

drwxrwxrwt   4 root root 692M Feb  1 11:09 tmp/
drwxr-xr-x  10 root root 4.0K Jan  1  2013 usr/
drwxr-xr-x  14 root root 4.0K Oct  7  2010 var/
...etc
debian
  • 3 3 个回答
  • 22844 Views

3 个回答

  • Voted
  1. Best Answer
    Giacomo1968
    2015-01-31T14:03:16+08:002015-01-31T14:03:16+08:00

    可能是/tmp/目录本身充满了未清理的陈旧 PHP 会话;这意味着问题的根源可能与/tmp/目录本身隔离。如果是这种情况,我会删除所有/tmp/sess_*文件。首先,列出所有sess_*文件,如下所示:

    ls -la /tmp/sess_*
    

    或者你可以wc这样计数:

    ls -la /tmp/sess_* | wc -l
    

    现在,一旦您确认那里有一些疯狂的文件,请继续运行以下命令来删除/tmp/sess_*文件:

    sudo rm -rf /tmp/sess_*
    

    短暂的会话文件将被吹走。

    但是另一种蛮力(但相对安全)的处理方式是清除/tmp目录本身,重新创建/tmp目录并重新启动服务器。

    由于该/tmp目录基本上是缓存材料的编码笔,因此那里没有任何有效的内容。所以我最好的建议是运行以下命令来删除和重新构建/tmp目录。

    rm -rf /tmp && mkdir /tmp/ && chown root:root /tmp && chmod 1777 /tmp
    

    现在,一个衬里基本上是一个由它连接的 shell 命令列表&&,它将首先删除/tmp、重新创建/tmp、将所有权更改/tmp回root:root,然后为/tmp目录设置适当的权限。如果您愿意,如果您觉得这样做更安全,您可以一个一个地运行每个命令。

    sudo rm -rf /tmp 
    sudo mkdir /tmp
    sudo chown root:root /tmp
    sudo chmod 1777 /tmp
    

    完成后,我建议重新启动服务器。事情应该再次平静下来。

    • 7
  2. undefine
    2015-02-02T14:13:13+08:002015-02-02T14:13:13+08:00

    有时损坏的文件系统会产生类似的效果 - 例如,当目录 /tmp 损坏时。或者 - 当文件太多时。

    对于“快速”修复:

    mv /tmp /tmp.xxx
    mkdir /tmp
    chmod a+rwxt /tmp
    

    如果有帮助 - 尝试重新启动系统和 fsck 根文件系统。如果没问题 - 只需删除 /tmp.xxx 目录。

    另一种可能性是 - 当 /tmp 是“其他”分区或 tmpfs(在 linux 虚拟服务器上看到)时 - 但 df 不显示(因为 df 从 /etc/mtab 文件中获取分区列表有时不正确)。尝试通过命令直接在 tmp 上检查磁盘空间:

    df /tmp
    df -i /tmp
    

    通常有助于会话的其他选项 - 它使用其他会话机制。如果您有很多临时会话,它们不需要非常持久 - 我建议您使用 memcache 进行会话存储。配置它很简单——你必须安装 php-memcache、memcached 然后在 php.conf 中配置:

    session.save_handler = memcache
    session.save_path="tcp://server:port?persistent=1&weight=1&timeout=1&retry_interval=15"
    

    然后 - 会话将存储在 memcache 中,达到定义的大小。超过它 - 最旧的将被自动删除。

    • 2
  3. Xael
    2015-07-18T07:06:36+08:002015-07-18T07:06:36+08:00

    对我来说,改变 fs.inotify.max_user_watches 就可以了。

    root@grostruc:/# service ssh restart
    Error: No space left on device
    root@grostruc:/# sysctl fs.inotify.max_user_watches
    fs.inotify.max_user_watches = 65536
    root@grostruc:/# sysctl fs.inotify.max_user_watches=262144
    fs.inotify.max_user_watches = 262144
    root@grostruc:/# service ssh restart
    

    修复 /etc/sysctl.conf 中更改的值

    • 1

相关问题

  • 关闭 FTP

  • 如何在同一台电脑上从 putty 连接 debian vmware

  • debian- 文件到包的映射

  • Debian Ubuntu 网络管理器错误 [关闭]

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve