我有一台有 4gb 内存的机器,但 Linux 只检测到两个在顶部和免费。BIOS 报告 4。
运行 i386 Debian Lenny。
我有一个安装了 8GB RAM 的 Windows 2008 x64 服务器。
任务管理器和资源监视器都坚持使用 7.5GB 的 RAM。但是,Processes (Memory Private Bytes) 下的内存列表并没有加起来。我确实检查了所有用户的 Show Processes 并手动添加了我想出的大约 3.5GB RAM 的数字。
我还查看了 SysInternals Process Explorer 的最新副本。并且私有字节或工作集加起来都不会超过大约 3.5GB 的正在使用的 RAM。
这是怎么回事?
======
更新:我重新启动服务器以查看内存利用率会发生什么。启动和常规操作开始后,它的 RAM 使用量为 3GB。18 小时后,它恢复到 6.8GB 的使用量,但没有迹象表明额外的 3.5GB 左右的 RAM 正在使用何处。
以下是资源监视器和任务管理器屏幕截图的链接:
更新 2:好吧,我相信我找到了问题所在。当我从我的 sql server 中分离一个较大的数据库时,显示为“正在使用”的 ram 数量急剧下降。Memory Private Bytes 计数几乎没有移动。所以我猜测 SQL Server 有某种分配内存的方法,它不会真正出现在任何监视器中。
我进一步创建了一个新的数据库文件,然后从我分离的那个文件中传输了所有数据。即使它有相同的数据,并且有相同的事务通过它,使用的内存仍然很低。也许数据库中有一些损坏?我将把它留给 DB 大神,然后去寻找另一个“问题”;)
有没有办法为特定服务/进程保留特定数量的内存?
我想保证 OpenSSH 始终有足够的可用内存,以便在服务器内存已满的情况下它可以接受新的 SSH 连接。
谢谢。
我确定这是一个非常基本的问题,但我只是想了解运行基于 Rails 的站点的 Ubuntu Hardy 服务器发生了什么。似乎我有可用内存,但系统报告它仍在交换内存(除非我读错了?)。
这是free -m输出
total used free shared buffers cached
Mem: 1024 905 118 0 33 409
-/+ buffers/cache: 462 561
Swap: 2047 95 1952
Run Code Online (Sandbox Code Playgroud)
任何人都可以向我解释一些可能的原因,即它始终保持 95MB 的交换空间(它永远不会更少)?我只是在寻找一些关于我可以检查的内容的线索,这些线索会向我确切地解释 Linux 中如何利用内存。
我不确定我是否有内存泄漏问题(正如我的托管公司所建议的那样),或者我们是否都需要阅读http://linuxatemyram.com。也许你们聪明的人可以帮助我们?
这是一个前端 Web 服务器虚拟机,基本上只在 RHEL 5.5 上运行 nginx 和 php-fpm。该服务器正在为 PHP 电子商务工具 Magento 提供支持。服务器在共享环境中运行,但我们很快就会改变这种情况。
无论如何.. 重新启动后服务器运行得很好,但一天之内它就会把自己磨成一团糟。加载页面实际上需要 2 分钟,CPU 像疯了一样尖峰,等等。当我通过 SSH 登录时,控制台甚至变得缓慢。就像我的整个服务器都瘫痪了一样。
我还一直通过 top 和 tcpdumping 传入流量监视数据库服务器。数据库在“缓慢”加载时间的大部分时间里都处于空闲状态。当我开始看到来自前端服务器的查询时,页面很快就会加载。
以下是我在减速期间登录后的一些统计信息,在重新启动 php-fpm 后:
[mike@front01 ~]$ free -m
total used free shared buffers cached
Mem: 5963 5217 745 0 192 314
-/+ buffers/cache: 4711 1252
Swap: 4047 4 4042
[mike@front01 ~]$ top
top - 11:38:55 up 2 days, 1:01, 3 users, load average: 0.06, 0.17, 0.21
Tasks: 131 total, 1 running, 130 sleeping, …Run Code Online (Sandbox Code Playgroud) /proc/meminfo 中 MemTotal 的值没有意义。作为一个人,注视它,它似乎与安装的 RAM 大致对应,但使用它来显示从自动化实用程序安装的 RAM,它似乎不准确且不一致。
对于具有 1G RAM 的系统,我希望 MemTotal 行的值为 1048576 - 1024*1024。但是相反,我看到的是1029392。在另一个4G盒子上,我看到的是3870172,它不是1024的倍数,它甚至不接近1029392*4。在 8G 盒子上,我得到 8128204,它似乎与其他值也没有相关性,也不是 1024 的倍数。
我正在尝试使用此信息在状态网页上报告 RAM。我的解决方法是将它“四舍五入”到最接近的 1G 倍数,但我想了解为什么这些值看起来不一致并且不符合我的期望。
有人可以补充我在这里缺少的东西吗?
编辑:扩展下面接受的答案....
可以在此处找到参考。
那个解释不一致的页面也让我感兴趣的是:
记忆信息:
提供有关内存分配和利用的信息。这因架构和编译选项而异。...
我的 PHP 脚本出现问题,收到以下错误消息:
Fatal error: Out of memory (allocated 359923712) (tried to allocate 72 bytes) in /path/to/piwik/core/DataTable.php on line 969
我正在运行的脚本是: /path/to/piwik/misc/cron/archive.sh
我假设数字是字节,这意味着总数约为 360MB。
出于所有意图和目的,我已将服务器的内存限制增加到远高于 360MB,但这是它始终出错的数字(给予或接受一个字节)。
请注意:这个问题不是关于修复脚本中的内存泄漏,也不是关于脚本本身使用这么多内存的原因。该脚本是 Piwik 归档过程的一部分,所以我不能只修复任何内存泄漏等。有关此脚本的更多信息以及我增加内存限制的原因,请参阅“如何设置自动归档”
鉴于脚本试图使用超过 360MB 的内存,我无法更改,为什么我似乎无法增加服务器上 php 可用的内存量?
6 月 23 日更新:请参阅下面的“我尝试过的内容”>“增加 Linux 的每个进程内存限制”以了解背景......如果我设置了ulimit -v 1024000,然后检查它ulimit -v我得到了正确的“1024000”值。如果我再次运行该脚本,它将继续前进,但最终会在达到相同的内存限制 (~360MB) 时出错。如果我立即检查ulimit -v,它已重置为“524288”的原始值。这似乎是问题的根本原因。
增加 PHP 的 memory_limit
鉴于 php.ini 文件:
php -i | grep php.ini
Configuration File (php.ini) Path => /usr/local/lib
Loaded Configuration …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 2TB 大的大型 raid 阵列上使用 e2fsck,并使用 GPT 进行分区(因为大小)。
系统上只安装了 1GB 内存,我目前无法添加更多内存。
问题是,在设备上启动 fsck 后不久,我收到一条错误消息:
Error storing directory block information (inode=115343515, block=0, num=108120142): Memory allocation failed
e2fsck: aborted
Run Code Online (Sandbox Code Playgroud)
经过一些在线搜索和研究,我在下面看到了这篇文章:
在查找 MAN 页面后,我遵循了建议e2fsck.conf,基本上创建了一个 /etc/e2fsck.conf 文件,如下所示:
[scratch_files]
directory = /var/cache/e2fsck
Run Code Online (Sandbox Code Playgroud)
并在确保创建/var/cache/e2fsck目录后再次尝试 fsck 。再次启动 fsck 并观察可用内存、cpu 使用情况和目录大小后/var/cashe/e2fsck……我可以说它确实有很大帮助……但它最终还是失败了,给出了同样的错误。基本上它有助于减缓内存消耗,但并没有完全否定它。
所以我尝试e2fsck.conf使用文件的添加标志:
dirinfo = false
Run Code Online (Sandbox Code Playgroud)
或者
dirinfo = true
Run Code Online (Sandbox Code Playgroud)
和
icount = false
Run Code Online (Sandbox Code Playgroud)
或者
icount = true
Run Code Online (Sandbox Code Playgroud)
两者似乎都没有太大影响,因为不久后就会发生同样的错误。
我错过了什么吗?我对 fsck 需要很长时间没意见...但我需要它实际完成而不是出错。
我有一个 Godaddy 服务器,它定期变得无响应。很难排除故障,因为当它无响应时我无法 ssh 进入。我通过添加一个 cron 作业来弄清楚发生了什么,该作业每 5 分钟将输出从“top”传送到日志文件。下次我在它无响应后重新启动它时,我检查了这些日志,发现 ram 已用完,但交换大部分未使用。
我正在努力减少那台机器上两个应用程序服务器的 ram 使用量(事实证明打开的连接太多了。每个连接都用了 30m,所以在打开 40 之后,服务器用完了 ram),但是我' d 真的很想知道如何确保我可以 ssh 进入机器。
如果交换文件未满,那么我认为服务器会有足够的空间来响应,即使它响应很慢。有什么办法可以保留一点内存,以便我始终可以通过 ssh 进入机器?
以下是服务器正常运行时的外观示例:
top - 15:13:21 up 3:12, 2 users, load average: 0.15, 0.30, 0.33
Tasks: 127 total, 1 running, 126 sleeping, 0 stopped, 0 zombie
Cpu(s): 2.4%us, 1.8%sy, 0.0%ni, 95.7%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 2064980k total, 1611252k used, 453728k free, 45852k buffers
Swap: 2096472k total, 0k used, 2096472k free, 790212k cached
Run Code Online (Sandbox Code Playgroud)
这是在服务器停止运行之前记录的最后一个顶级日志:
top - 14:45:08 …Run Code Online (Sandbox Code Playgroud) 除了占用大量 CPU 之外,TrustedInstaller.exe 还占用了我的 Windows server 2008 中的大量内存。这个问题有什么解决方案吗?顺便说一句,Windows 更新服务应该是肯定启动的。
memory ×10
linux ×6
debian ×2
php ×2
32-bit ×1
fsck ×1
memory-leak ×1
nginx ×1
partition ×1
sql-server ×1
ssh ×1
swap ×1
ubuntu ×1
vmware-esx ×1