{"id":13586967,"url":"https://github.com/tatref/linux-mem","last_synced_at":"2025-04-07T18:35:17.276Z","repository":{"id":65934028,"uuid":"412831421","full_name":"tatref/linux-mem","owner":"tatref","description":"Linux memory tools","archived":false,"fork":false,"pushed_at":"2024-02-27T00:38:14.000Z","size":1158,"stargazers_count":39,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-02-28T00:44:48.285Z","etag":null,"topics":["linux","memory"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tatref.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-10-02T15:12:36.000Z","updated_at":"2024-08-01T16:32:59.905Z","dependencies_parsed_at":"2024-01-22T02:38:55.665Z","dependency_job_id":"31cea7f8-243b-4c98-b213-11b070cb8487","html_url":"https://github.com/tatref/linux-mem","commit_stats":null,"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tatref%2Flinux-mem","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tatref%2Flinux-mem/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tatref%2Flinux-mem/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tatref%2Flinux-mem/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tatref","download_url":"https://codeload.github.com/tatref/linux-mem/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247707865,"owners_count":20982864,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["linux","memory"],"created_at":"2024-08-01T15:05:56.426Z","updated_at":"2025-04-07T18:35:16.972Z","avatar_url":"https://github.com/tatref.png","language":"Rust","funding_links":[],"categories":["Rust"],"sub_categories":[],"readme":"# Linux memory tools\n\nA toolbox to inspect Linux memory\n\nhttps://github.com/tatref/linux-mem\n\n\n# Main tools\n\n## [snap.py](proc_snap/README.md)\n\n/proc snapshot tool\n\n## [memstats](docs/memstats.md)\n\nMemory usage for groups of processes.\nMain target is Oracle databases\n\n![Memory groups Venn diagram RSS USS](./assets/uss_rss.png#1)\n\n```\n┌─────────────────┬───────┬────────────┬────────────┬────────────┬───────────┬──────────┬──────────┬─────────────┬──────────┐\n│ group_name      │ procs │ mem_rss    │ mem_anon   │ mem_uss    │ swap_anon │ swap_rss │ swap_uss │ shm_mem     │ shm_swap │\n├─────────────────┼───────┼────────────┼────────────┼────────────┼───────────┼──────────┼──────────┼─────────────┼──────────┤\n│ Some(\"+ASM1\")   │ 102   │ 5209.41 MB │ 4636.65 MB │ 5179.87 MB │ 0 MB      │ 0 MB     │ 0 MB     │ 3213.41 MB  │ 0 MB     │\n│ None            │ 74    │ 3790.02 MB │ 3536.86 MB │ 3765.41 MB │ 0.01 MB   │ 0.01 MB  │ 0.01 MB  │ 0 MB        │ 0 MB     │\n│ Some(\"DBB1\")    │ 109   │ 2357.09 MB │ 1489.36 MB │ 2216.93 MB │ 0 MB      │ 0 MB     │ 0 MB     │ 21479.03 MB │ 0 MB     │\n│ Some(\"DBD1\")    │ 90    │ 1614.49 MB │ 1101.75 MB │ 1470.30 MB │ 0 MB      │ 0 MB     │ 0 MB     │ 4299.16 MB  │ 0 MB     │\n└─────────────────┴───────┴────────────┴────────────┴────────────┴───────────┴──────────┴──────────┴─────────────┴──────────┘\n```\n\n\n## [kpageflags](src/bin/kpageflags-viewer.rs)\n\nLive visual map of physical memory with client/server modes\n\n![kpageflags](assets/kpageflags.png)\n\n\n### Usage\n\nLocal usage\n\n```\nsudo ./target/release/kpageflags-viewer\n```\n\nServer usage\n```\nsudo ./target/release/kpageflags-viewer server 192.168.0.1:10000\n```\n\nClient usage\n```\n./target/release/kpageflags-viewer client 192.168.0.1:10000\n```\n\n### Building\n\nCross compiling to Windows (client only)\n```\ncargo install cross  # requires podman/docker\ncross b --release --target x86_64-pc-windows-gnu --bin kpageflags-viewer\n```\n\n\n## [processes2png](src/bin/processes2png.rs)\n\nVisual map of processes memory\n\nFor details, see [my blog post](https://tatref.github.io/blog/2023-visual-linux-memory-compact/)\n\n\nEffect of memory compaction:\n\n![gif](https://tatref.github.io/blog/2023-visual-linux-memory-compact/out.gif)\n\n\n\n# Small tools\n## [procinfo](src/bin/procinfo.rs)\n\nMemory map details for single process. List virtual memory, physical pages, physical flags...\n\nInformation is grabbed from `/proc/\u003cpid\u003e/smaps`, `/proc/\u003cpid\u003e/pagemap`, `/proc/kpageflags`\n\nUsage: `procinfo \u003cpid...\u003e`\n\n```\n# procinfo 12345\n0x00007ff437847000-0x00007ff437849000 MMPermissions(NONE | READ | WRITE | PRIVATE) 0 Anonymous\nPFN=0x0000159f83 MemoryPageFlags(SOFT_DIRTY | PRESENT | 0x159f83) / Some(PhysicalPageFlags(UPTODATE | LRU | MMAP | ANON | SWAPBACKED))\nPFN=0x000010a5cb MemoryPageFlags(SOFT_DIRTY | PRESENT | 0x10a5cb) / Some(PhysicalPageFlags(UPTODATE | LRU | MMAP | ANON | SWAPBACKED))\nstats: VSZ=8 kiB, RSS=8 kiB, SWAP=0 kiB\n0x00007ff43784d000-0x00007ff437854000 MMPermissions(NONE | READ | SHARED) 160259 Path(\"/usr/lib64/gconv/gconv-modules.cache\")\nPFN=0x0000109d63 MemoryPageFlags(SOFT_DIRTY | FILE | PRESENT | 0x109d63) / Some(PhysicalPageFlags(REFERENCED | UPTODATE | LRU | ACTIVE | MMAP))\nPFN=0x0000109d5b MemoryPageFlags(SOFT_DIRTY | FILE | PRESENT | 0x109d5b) / Some(PhysicalPageFlags(REFERENCED | UPTODATE | LRU | ACTIVE | MMAP))\n```\n\n## [shmat](src/bin/shmat.rs)\n\nAttach shared memory segments to current process\n\n## [shmem](src/bin/shmem.rs)\n\nShared memory tool\n\n## [connections](oracle-tools/src/bin/connections.rs)\n\nEstablish lots of connections to Oracle database\n\n## [find_instances](oracle-tools/src/bin/find_instances.rs)\n\nFind Oracle database instances, connect to DB and run some request. Env variables (SID, lib...) and user are found automatically.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftatref%2Flinux-mem","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftatref%2Flinux-mem","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftatref%2Flinux-mem/lists"}