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 / 问题 / 1109552
Accepted
Leon
Leon
Asked: 2022-09-01 01:04:07 +0800 CST2022-09-01 01:04:07 +0800 CST 2022-09-01 01:04:07 +0800 CST

如何使用 Linux 持续监控内存使用情况?

  • 772

我有一个运行 Ubuntu 服务器(20.04.1)的守护程序服务应用程序。总物理内存2G,交换空间4G。

有时我的服务被操作系统悄悄地杀死了,尽管我OOMScoreAdjust=-1000在我的 systemd 服务描述文件中添加了/etc/systemd/system/,但它是一个不应该被杀死的关键应用程序。我想它被杀死的原因可能是它使用了太多的内存。

我需要获取有关我的服务的内存使用情况的详细日志,例如每分钟的一个日志条目,以便我可以找出其中的最大值,并调整其他服务(如 postgresql)的要求。

它是一个守护程序应用程序并运行云 VPS,因此我无法启动命令top并连续观看它。

有没有办法可以生成这样的日志?

谢谢!

linux
  • 3 3 个回答
  • 120 Views

3 个回答

  • Voted
  1. Halfgaar
    2022-09-01T01:26:14+08:002022-09-01T01:26:14+08:00

    您可以通过专业或黑客方式进行操作。您可以使用各种监控和/或进程记帐解决方案,或者您可以简单地systemctl status | grep something每分钟运行一次并写入 Systemd(它使用内核控制组)报告的内存使用情况。

    • 2
  2. Best Answer
    LittleFox
    2022-09-01T02:27:48+08:002022-09-01T02:27:48+08:00

    根据Halfgaar的回答,做简单的hacky方式但没有systemd status | grep something

    首先,我强烈建议使用某种监控解决方案 - 安装 Prometheus systemd-exporter应该非常容易,并且在任何其他机器上运行 Prometheus 以检索统计数据应该是 - 甚至可以在家庭/公司的设备上只要你调试这个问题。在这个设置中,metricssystemd_process_resident_memory_bytes和 systemd_process_virtual_memory_bytes可能systemd_process_virtual_memory_max_bytes是有趣的。

    cgroups(所有这些都取决于 v2)在 /sys/fs/cgroup 下有一个文件系统,您可以在其中查询很多信息。对您来说最有趣的是memory.stat,其中第一行anon $someNumber可能是最有趣的值(给您正在使用的内存字节,这些字节不受文件支持,因此除了交换之外无法从内存中删除)。

    如果您想要每个 systemd 服务,您可以使用 eg /sys/fs/cgroup/system.slice/systemd-journald.service/memory.stat,为您提供 systemd-journald.service 中所有内容的内存(此服务的进程以及由此启动的所有内容)。您还可以通过使用/来区分system和user(我在笔记本电脑上的当前图形会话,我在其中编写此内容,将在 中) 。user/sys/fs/cgroup/system.slice/memory.stat.../user.slice/memory.stat

    您的旧 Ubuntu 版本可能有 cgroups v1,在这种情况下路径不同 - 请查看文档:https : //manpages.ubuntu.com/manpages/focal/man7/cgroups.7.html 用于一般 cgroups , https://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt#cat-sysfscgroupmemory0memoryusage_in_bytes用于 cgroup v1 内存控制器。

    • 2
  3. Leon
    2022-09-02T10:26:20+08:002022-09-02T10:26:20+08:00

    经过一些实验,我觉得这是一个很好且足够简单的解决方案:

    添加一个 crontab 作业以每分钟执行一次以下命令:

    */1 * * * * top -bn1|grep my_app_name >> /some/where/memory-usage.log

    有了这个日志文件,我可以很容易地找出最大使用量。

    • 0

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 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