Hacker News new | comments | ask | show | jobs | submit login
Glances - an easy CLI overview of your system (CPU, mem, I/O) (nicolargo.github.com)
250 points by cgbystrom on Sept 3, 2012 | hide | past | web | favorite | 57 comments

The app looks really nice visually, a few points though:

except Exception: pass

is generally considered to be a code smell. The problem being that when you're catching all exception information and throwing it away you will never know what went wrong and where. If you're doing a try/except Exception nested inside another except Exception then I would humbly suggest that you really need to think about refactoring and restructuring.

Also, anywhere that you see a repeating pattern, you might be better off wrapping it in a function or method rather than typing it out each time. For example in your __update__ method starting at about line 400 you've got pretty much the same code in two places with just a variable different between the two.

Besides upvoting for agreement with all the above (I didn't review the code but certainly all this is worth fixing if present), I'll also say that you probably shouldn't recommend people using `sudo` to install your thing in your README / landing page.

What is preferred?

Typically you just leave off the sudo and recommend people to just run pip install mything. That's the only thing required, unless you have a Python that has its `site-packages` directory in a place that isn't user writable, for which people who are in this situation are generally aware of the proper solution (which I'll mention in a sec anyhow).

You should essentially never use sudo to install any package, since even besides any security issues, it can clobber things on your system that are necessary for your OS (by say, upgrading a package that your OS ships with).

I happen to not use my system's shipped Python at all, since I'm on OSX, but if you are using it, you want to use `pip install --user mything`, no sudo necessary.

I will definitely try this out! Just from browsing the webpage it looks nice.

The psutil library doesn't use process accounting, does it? Without it, Glances will miss processes whose lifetime is within a single check interval.

As always when this topic comes up, I have to give a recommendation for atop. This LWN article goes into why it is awesome- https://lwn.net/Articles/387202/ . The logging and interactive examination of historical process-level metrics is the killer feature for me. Here are some screenshots- http://atoptool.nl/screenshots.php

If you like this, you might also like htop, which is similar but markedly faster at starting up.

nmon is another favorite of mine.

Of course, nothing beats tools like Munin. I even put business metrics there.

Just curious, is Glances the python script taking up 100% CPU and 1 GB of RAM in that screenshot?

Doubtful. I have glances running on a server at home updating on the default 1s timer, it uses 5% CPU. I should probably change that to a longer update interval, but that server doesn't do much processing so it's not a big problem.

You can also launch glances.py directly so if it is going to show up on the process list it will be as 'glances.py' and not just 'python'.

First, this is cool! Good job!

Would you run this or would you run htop? I'm not sure when I'd use one over the other.

Maybe someone less dense than I knows more and can tell me what the differences are?

htop (and by extension top) is for CPU / memory / load information only.

Normally to get network and disk stats I have to run a combination of dstat, iotop. A simple screenshot comparison: http://i.imgur.com/eQPuQ.png

OTOH htop takes up ~2MB per instance, while glances is taking up ~13MB. Glances also doesn't have the ability to sort by columns except by CPU/mem %. You can't kill browse or kill processes from the list either.

For anyone who doesn't know, htop actually does a fair bit more. For example, go to a process (arrow keys or "/" to search), then press "l" to show open files (with lsof) or press "s" to show a strace. You can also renice processes and send sigterm or other signals to them.

Not sure how this would work from a UI perspective but it'd be nice if you could add other servers to be monitored. So instead of me having 20+ terminal windows open, ssh'd into each box and running this app, I could run this app from a central server that's showing all of them together.

Again, I have no idea how to present that nicely.

If you have 20 servers, it's probably time to move on to a more robust monitoring solution.

Something like screen or byobu?

Looks very nice. I'm a very happy user of iStat Menus for similar monitoring on OS X.

One thing that iStat menus lacks, and I was hoping Glances had (but appears not to) is a "top" like viewer for what is using bandwidth. Both applications only give the overall bandwidth usage. I'll see my bandwidth shoot up hundreds of Kbps out of nowhere and quickly try to determine what's using it through combinations of looking at open programs (maybe they're updating in the background), lsof -i, nettop if I can remember the name, but haven't been particularly keen on any of them. Any recommendations?

Nethogs (http://nethogs.sourceforge.net/) does what you want, but it's linux-only.

Not Mac-able because it depends on procfs.

uch a tease:

The excellent Amit Singh rants about how useful procfs is and how Mac doesn't have it, but then says it's not really needed, and then almost builds it anyway, then gives up due to unrelated hardware problems:



This case is one of the more blatant demonstrations showing the superiority of The Unix Way of "everything is a file. "

Have you tried iftop?


There used to be this small, simple tool called "ntop" which did exactly that - top, but for active network connections.

Then the authors decided to go apeshit and add everything and the kitchen sink to it ... a GUI, an http server, all kinds of crazy features as they attempted to slot it as some kind of end-all-be-all enterprise monitoring software.

I had some hacked up source tarballs that continued to allow me to run the old, circa 2002 ntop on systems as old as FreeBSD 6.x, but it no longer compiles under 8.x.

tl;dr: ntop used to exist but the devs had dollar signs in their eyes and mutated it beyond all recognition.

This looks good. For cpu and memory checks I find htop to be more lightweight and functionality wise is pretty good too. It doesn't show disk stats though, for which something like atop should be used.

Glances looks great. Also we love `htop`. http://htop.sourceforge.net

Pretty sweet. One nitpick: any way of including disk wait?

You should apt-add glances-stable instead of glances-dev (the latter doesn't seem to work) on debian/ubuntu.


    sudo add-apt-repository ppa:arnaud-hartmann/glances-stable && sudo apt-get update && sudo apt-get install glances

Seems to run decently on my Mac 10.8

Could you share how you got this to work on your Mac?

Another way to install this on OSX if you use Homebrew package manager.

1. Install Homebrew if you don't have it already

2. Install the brew-pip package

  brew install brew-pip
3. Add Homebrew's pip path to your PYTHONPATH environment variable (you probably should add this to some sort of shell initialization file like ~/.bashrc or ~/.zshrc)

  export PYTHONPATH=$(brew --prefix)/lib/python2.7/site-packages
3. Now install any pip pacakges with Homebrew!

  brew pip Glances

I got this working by just installing pip and then entering "sudo pip install glances".

I have to say, I think this will replace htop for me on my mac. It's actually more useful than Activity Monitor is since it also shows network interfaces.

  % wget https://github.com/downloads/nicolargo/glances/glances-1.4.tar.gz
  % tar zxvf glances-1.4.tar.gz
  % cd glances-1.4
  % sudo python setup.py install

Nice! I like how it shows all the vital information in very little space. I've been using nmon for a while, which has some interesting features like graphing, but doesn't utilize all the screen space very well.

Seems cool but I could not get this to install on Ubuntu 8 (old I know) ... even trying to do a wget gave me this error

"ERROR: Certificate verification error for github.com: unable to get local issuer certificate"

Use wget with --no-check-certificate or change https to http

This seems like such a bad idea... certs exist in repos for very good reasons.

Sure, but if you're simply downloading a shell script (whose source code you can see) from github (a site you can trust), I don't see the issue.

If it can't validate the cert, it could be the sign of a MITM attack. Likely? No, but I wouldn't take content with cert issues and run it as root. At least not without validating it in some other way.

You're right. It very well could be a MITM attack. But I guess you could see the source code for yourself after you've downloaded it right?

Anyhow, I agree that using --no-check-certificate is usually a bad idea.

Runs well on my FreeBSD 9.0 box. Thanks.

dstat(1) is another of this ilk, also Python. I prefer it because new results are printed under old, giving history in scrollback. If on a machine where these aren't available, `vmstat 1' is the standard historical fallback.

You could create a nice desktop widget out of this by piping it to Conky.

Or you could just use conky

Is it on yum for centos?

I was playing with htop but it's not really any better than top.

It might surprise you just how full featured and useful plain ole Linux top really is. I made a YouTube video based on a training session I did at my old job on how to configure top to show you a lot more interesting things than it does by default.

Shameless plug: http://www.youtube.com/watch?v=yFKRsLj_Jhg

Try atop. There's an overview at https://lwn.net/Articles/387202/

It's available through the EPEL yum repository http://dl.fedoraproject.org/pub/epel/6/x86_64/repoview/atop....

Not in its documentation, but atop requires root. If you're on a VM somewhere, you might be happier with htop or glances.

You can run atop without root, it just won't use process accounting so you may miss some processes (but so would htop and glances).

I'm not sure what being on a VM has to do with anything.

It would be nice if there was a way (e.g. a command-line argument or atoprc setting) to disable the ability to kill processes from within atop; then it would be safer for an admin to make it executable as root by regular users.

Apologies, I based my comment on atop's README:

    For interactive use it is sufficient to install ATOP with the command (as root):

        make install
I wouldn't have guessed the reference to root was optional! Thanks for the pointer.

Just a thought - ethtool and miitool provide link status for a network interface. I didn't study the code to see how this gets the network speed, but if it isn't using something like ethtool/miitool, you might want to.

This is extremely nice. Thank you!

Using it now, thanks for sharing!

Wow... Kudos on a great job!

You'll probably want to change the name. HP/UX has similar performance monitoring tools named Glance and GlancePlus that are unlocked via license keys. These tools have been around for at least 15 years, they are installed with the base OS (and thus are well known within the community), and perform the same functions as your software (performance monitoring).

Also it looks like the font the interface uses is a bit rounded. I'd recommend something blockier to prevent litigation.

I know you're trolling, but I'll throw this out anyway-

This is a CLI. Usually the font is chosen by the term emulator, not the program.


Threadshitting about Apple.

bad joke about rounded corners (see the samsung vs. apple case)

I think it's referencing the Apple/Samsung rounded corner patent fun.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact