我想测量程序在执行期间使用的总内存(如 RAM)。理想情况下,类似的东西time会在程序退出时运行程序并打印统计信息。
unix/linux/bsd 世界里有这么标准的工具吗?谢谢。
编辑:
我试图分析的程序需要几分之一秒的时间来执行,所以任何暗示“运行时检查这个”的东西都不起作用。这就是为什么我要一个“时间”之类的工具。
这是场景,我希望您提供有关以下方面的专家建议:
我目前有大约 2GB 的数据库,一年后可能会翻一番。我想要为我要订购的专用数据库服务器提供最佳服务器性能,该服务器将用作运行 WordPress、论坛和 mediawiki 的流量相当大的站点的后端。大多数数据库流量应该是只读的。
所以问题是,我真的需要超过 4GB 的 RAM 吗?我应该选择 8 核还是 4 核?一个比另一个重要吗?
[编辑] 作为后续,最终在具有 8 GB RAM 的 8 核服务器上获得了很多优惠,所以就这样做了。很高兴知道我会有很大的成长空间。
我们有一个 debian linux 网络服务器。它只是运行 apache2。我们的 mysql 服务器在另一台主机上。然而,我们有时会在网络服务器上运行 cron 任务来执行常规任务。
然而,最近一个 cron 任务出现了一个错误,并开始吞噬内存。Linux OOM 杀手杀死了 apache。这当然导致我们的网站瘫痪。内存饥渴的 cron 继续运行。但是在这种情况下,我希望 OOM 杀手杀死该脚本,而不是apache。
有什么方法可以配置内核,以便我可以说不要杀死名为“apache2”的进程(或者至少让 apache2 成为它杀死的最后一件事)?apache 和常规 cron 都以同一用户 (www-user) 运行。
有没有办法在 Windows 2008 R2 x64 机器上测试 RAM?
我有 6GB 的内存,我怀疑我的 4 根内存条中的一根可能坏了。
我在 CentOS 服务器上运行了大量应用程序,并且我看到了奇怪的内存行为。这是一个 munin 图的快照:

正如您所看到的,提交的内存量逐渐增加,导致交换文件被使用。让我感到奇怪的是,非活动内存的数量也在不断增长。我的理解是,非活动内存实际上是操作系统已释放但尚未清理并放回空闲内存池中的内存。似乎内存不足是由于缺乏清理造成的,但我可能是错的。
你能给出一些提示来找出问题的原因和/或让 CentOS 回收不活动的内存吗?
谢谢。
一些额外的信息:
1) 我在 /tmp 上安装了一个 tmpfs 并且存储在那里的文件数量增加了(但它是非活动内存量的两倍)。
2) cat /proc/meminfo(在图像的后期)给出:
MemTotal: 14371428 kB
MemFree: 1207108 kB
Buffers: 35440 kB
Cached: 4276628 kB
SwapCached: 785316 kB
Active: 9038924 kB
Inactive: 3902876 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 14371428 kB
LowFree: 1207108 kB
SwapTotal: 10223608 kB
SwapFree: 6438320 kB
Dirty: 627792 kB
Writeback: 0 kB
AnonPages: 7844560 kB
Mapped: 49304 kB
Slab: 146676 kB
PageTables: 27480 kB
NFS_Unstable: 0 kB …Run Code Online (Sandbox Code Playgroud) 我使用的是 HP DL360p Generation 8。我需要一个非常可靠的服务器,所以我使用了带有备用驱动器的 RAID 1,我还添加了一个额外的电源。但是我应该安装在线备用内存吗?还是只是在浪费钱?
我们每天都重新启动 apache 服务器,因为 RAM 使用量达到了极限。
虽然有价值看到这个 serverfault answer,我不认为降低MaxClientsapache 配置是解决未知根问题的方法。
下面的 apache 进程以 MB 为单位出现异常大并且时间很长。这是否意味着存在内存泄漏。这是否意味着我们应该降低 MaxRequestsPerChild 设置?
见http://www.devside.net/articles/apache-performance-tuning
你能理解下面的数据吗?
下面是摘录什么
$top 和 M
返回:
20839 www-data 20 0 1008m 359m 22m S 4 4.8 1:52.61 apache2
20844 www-data 20 0 1008m 358m 22m S 1 4.8 1:51.85 apache2
20842 www-data 20 0 1008m 356m 22m S 1 4.8 1:54.60 apache2
20845 www-data 20 0 944m 353m 22m S 0 4.7 1:51.80 apache2
Run Code Online (Sandbox Code Playgroud)
然后调查一个单一的过程
$sudo strace -p …Run Code Online (Sandbox Code Playgroud) 我有一个不断崩溃的服务器。我知道服务器崩溃有多种原因。但是,如果原因是系统在崩溃之前耗尽了 RAM;我应该如何确认这是原因?我应该查看哪些日志文件?我应该寻找什么行/错误消息?我正在运行 CentOS。大量使用 php 解析 xml 文件最多超过 2 GB。服务器有 16GB 内存。
编辑 1
[root@61540 ~]# free -m
total used free shared buffers cached
Mem: 16035 1526 14509 0 40 1002
-/+ buffers/cache: 483 15552
Swap: 8197 0 8197
Run Code Online (Sandbox Code Playgroud)
编辑 2 /var/log/messages
Feb 17 20:38:26 61540 syslogd 1.4.1: restart.
Feb 17 20:38:26 61540 proftpd[3896]: 66.90.101.85 - received SIGHUP -- master server reparsing configuration file
Feb 17 22:23:06 61540 avahi-daemon[3984]: recvmsg(): Resource temporarily unavailable
Feb 17 23:07:37 61540 proftpd[10620] - (Several lines …Run Code Online (Sandbox Code Playgroud) 我们正在使用 Newrelic 来衡量我们的 Python/Django 应用程序性能。Newrelic 报告说,在我们的系统中,“Memcached”正在平均12ms响应命令。
深入到前十个左右的 Web 视图(按请求数),我可以看到有些Memcache get占30ms; 我无法Memcache get在小于10ms.
有关系统架构的更多详细信息:
~0.5msMemcached 的响应时间不是10ms很慢吗?
据我了解,如果您认为“Memcache 太慢”那么“您做错了”。那我做错了吗?
这是memcache-top命令的输出:
memcache-top v0.7 (default port: 11211, color: on, refresh: 3 seconds)
INSTANCE USAGE HIT % CONN TIME EVICT/s GETS/s SETS/s READ/s WRITE/s
cache1:11211 37.1% 62.7% 10 5.3ms 0.0 73 9 3958 …Run Code Online (Sandbox Code Playgroud) 在 64 位 Windows Server 2003 上,我可以使用 taskmgr 或进程资源管理器看到总提交费用约为 3.5GB,但是当我对每个进程消耗的私有字节数求和时(通过运行pslist -m并添加Priv列下的所有值)总容量为 1.6GB。
我知道哪个进程似乎导致了这个(sqlservr.exe),因为当我终止该进程时,提交费用急剧下降。然而,有问题的进程只消耗了约 220MB 的私有字节,但终止进程会使提交费用降低约 1.6GB。
这怎么可能?提交费用怎么会比 Private Bytes 大得多,后者应该代表提交的内存量?如果其他一些因素导致提交费用,那么该因素是什么,我如何在流程浏览器中查看其影响?
注意:我声称我已经理解保留内存和提交内存之间的区别:我上面的调查特别涉及私有字节,它只包括提交的内存,不包括保留的内存。在这种情况下,进程的虚拟大小超过 4GB,但这应该无关紧要 - procexp 中的虚拟大小代表保留的、未提交的内存,不应参与提交费用。
我对这个问题的一般答案特别感兴趣:我假设如果 sqlservr.exe 可以以这种方式运行,那么任何进程都可能会这样做。
我注意到,尽管 Procexp 报告了 220MB 的私有字节,但将 Sysinternals VMMap 指向此进程报告了1.6GB的已提交“私有数据”。鉴于“Windows® Sysinternals 管理员参考”中有关此字段的文档指出:
私有数据内存是由 VirtualAlloc 分配的内存,不由堆管理器或 .NET 运行时进一步处理,或分配给堆栈类别... VMMap 对“私有数据”的定义比 Process Explorer 的定义更精细“私人字节。” Procexp 的“私有字节”包括属于该进程的所有私有提交内存。
即 VMMap 提交的“私有数据”应该小于 procexp 的“私有字节”。
此外,在阅读 Mark Russinovich 出色的Pushing the Limits of …
memory ×10
linux ×3
apache-2.2 ×2
centos ×2
hardware ×2
cache ×1
hp ×1
hp-proliant ×1
memcached ×1
multi-core ×1
mysql ×1
oom ×1
performance ×1
python ×1
ramdisk ×1
testing ×1
tmpfs ×1
unix ×1
windows ×1