Long time user of btop. Only thing it is missing is a ports column next to the others. Also I think the cpu/gpu graph graph is way oversized and would like more space occupied by the open file table in general.
Well, unless one is using FreeBSD or OpenBSD, where the btop code is still using 32-bit integers to calculate 64-bit sizes, and falling prey to unsigned integer wraparound. htop's code calculates using size_t, which ends up as a 64-bit integer on 64-bit architectures.
2 Settings I change on every htop which makes a HUGE difference.
1. I disable user threads. Those mostly just clutter up the htop view while providing no useful information.
2. I enable the process tree view. Very frequently, where a process comes from is much more important than other information. It also lets you see and track things like a compiler process which is eating through a bunch of files.
IMO, both these things should be the default behavior of htop.
I appreciate the note on virtual memory not being reliable. This is what Windows task manager reports by default and it's terrible. Resident size is the most reliable metric. Anything else can be wrongfully inflated by things like harmless memory mapped files that won't actually hurt anything. eg. memory map 2GB of logfiles, it'll only be paged in if reading that portion of the logfile so isn't really using memory but users look at the processes and claim "OMG why does this app use so much memory". It doesn't. It uses very little. You're reading the memory usage wrong. Chrome actually had this problem for a while and they moved away from using memory mapped files. Not because memory mapped files are a bad thing but because users will read the memory usage and go crazy over what they see even though it's not really using that much actual physical memory.
There's actually guides out there on the web that tell people judge usage by virtual memory allocated too :(. At least this article gets it right :).
One issue with that relative to RSS is permissions. Historically, all procs could see the RSS used by procs of all other users (at least if they could see the PIDs at all). So, RSS requires no special permissions, but the Linux kernel team decided PSS should not be as promiscuous for whatever reasons (I didn't do a deep dive). So, I'm always having to do (the equivalent of) `sudo pu`.
If you use memory-mapped files, cached pages count towards the resident set size of your process. If you use ordinary file I/O, they don't. That behavior has amusing consequences in HPC clusters that monitor the memory usage of each job and kill them if they use more memory than they requested.
Resident set size is not the amount of memory that the process wants, it’s how much the OS is willing to give it. So once memory pressure kicks in it stops being representative. I’ve seen this misunderstanding lead to bad decisions a few times. I even went so far to remove this value form charts because a team member was going left when he should have gone right.
Just to clarify, Windows Task Manager uses Private Working Set by default for process memory usage which does NOT include shared pages with other processes such as libraries or memory mapped files (hence the name “private”). It only shows the memory that maps to privately allocated physical memory per process. It’s probably closer to Resident Set on Unix.
You probably meant the memory usage in performance tab but I wanted to clarify in case people mistake it for all memory usage fields.
For top if you use the > character it will sort by memory usage. I use that sometimes to figure out why my host is becoming laggy. Also you'll see swapd is taking up CPU.
When I read stuff like this, I come to the realization that even after daily driving Linux for 20+ years I still barely utilize its full potential. Great article.
For the ones that don't know "nmon", have a look at it as well! (press "h" to see the list of available monitors - press it again to make it go away, press "q" to quit)
A different usage paradigm from *top that I have come to like better is to do differential ps-like reports and system-wide (like vmstat) reports which leaves everything in your terminal scrollback buffer as in: https://github.com/c-blake/procs { written in the uncommonly efficient, expressive Nim programming language }.
Nowadays most of my processing happens on the GPU, so htop/top better evolve or become mostly irrelevant because a tool that will support both CPU __and__ GPU will replace it.
Screws have been around for about 3 millennia at this point. They have patently failed to obviate the use of nails. So by this analogy we can expect the 'Only GPUs do the work.' believers to be still promising this, any day now, about three thousand years hence. (-:
> Nowadays most of my processing happens on the GPU, so htop/top better evolve or become mostly irrelevant
If you’re a 3D rendering designer, an ML engineer or a crypto bro, then sure.
Here are the common workloads (for the average SWE on HN) that use CPU/RAM:
- compilation/builds
- language servers and IDEs
- test suites
- local containers
- local databases
- node tooling
- browsers
- data processing
- compression and encryption
- searching/indexing
As others mention it - it seems to shows the Watts used as well :) (and network, and GPU, and disks,....)
[0]: https://github.com/aristocratos/btop
1.) No zram/zswap statistics. (Though htop only supports zram also.)
2.) No ZFS statistics breakdown.
3.) Doesn't support Arc GPU yet.
4.) I can't disable the disk fill bars, which makes the I/O rate graphs extremely squished unless the console window is very large.
* https://news.ycombinator.com/item?id=48778757 (https://crocidb.com/post/freebsd-ate-my-ram/)
* https://github.com/aristocratos/btop/pull/1728
1. I disable user threads. Those mostly just clutter up the htop view while providing no useful information.
2. I enable the process tree view. Very frequently, where a process comes from is much more important than other information. It also lets you see and track things like a compiler process which is eating through a bunch of files.
IMO, both these things should be the default behavior of htop.
There's actually guides out there on the web that tell people judge usage by virtual memory allocated too :(. At least this article gets it right :).
Actually, Proportional Set Size is more accurate than RSS. See: https://en.wikipedia.org/wiki/Proportional_set_size
One issue with that relative to RSS is permissions. Historically, all procs could see the RSS used by procs of all other users (at least if they could see the PIDs at all). So, RSS requires no special permissions, but the Linux kernel team decided PSS should not be as promiscuous for whatever reasons (I didn't do a deep dive). So, I'm always having to do (the equivalent of) `sudo pu`.
Just to clarify, Windows Task Manager uses Private Working Set by default for process memory usage which does NOT include shared pages with other processes such as libraries or memory mapped files (hence the name “private”). It only shows the memory that maps to privately allocated physical memory per process. It’s probably closer to Resident Set on Unix.
You probably meant the memory usage in performance tab but I wanted to clarify in case people mistake it for all memory usage fields.
https://nmon.sourceforge.io/pmwiki.php
Especially disk throughput and I/O (keys "d" & "D") can be very useful.
I use htop often but pretty much only use it to find pid or cpu-culprits, and never really understood the rest.
You'll be glad you did.
https://github.com/fenrus75/powertop
What good does it do to stick your head in the sand?
CPUs are great for orchestrating work, GPUs are great for actually doing the work.
Right, and wouldn't it be really nice if we could check on our orchestrators to make sure their not bottlenecking ops?
"How come we can fully load the GPUs?" "Idk boss, amelius said htop et al were irrelevant so we can't really investigate"
If you have a systems tool that gives an overview of resources used, then better monitor them both.
Imho failing to do so is not future-proof. Your opinion might differ.
Get the fuck out. I do write for GPU as well. One does not replace the other.
No one's doing database management on GPUs. No one's scraping data on GPUs. Can't run VMs on GPUs. Can't run web servers on GPU...
If you’re a 3D rendering designer, an ML engineer or a crypto bro, then sure.
Here are the common workloads (for the average SWE on HN) that use CPU/RAM:
Ok sure, top/htop is totally irrelevant now /s(Happened to me)