On Friday, 19 April 2019 at 03:27:04 UTC, Adam D. Ruppe wrote:
On Friday, 19 April 2019 at 02:58:34 UTC, Alex wrote:
Curious, what are these programs?

A terminal emulator gui (like xterm), a detachable terminal emulator (like gnu screen), a slack client, an irc client, and a bunch of http servers including d doc search, a work program, and a personal utility.


Ok, nothing useful ;) I was thinking you might be doing stuff like running a security system that did computer vision, or some type of advanced house monitoring and control(voice activated doors or something) ;)

Could you not, as a quick fix, just reboot and automate restarting those?

Maybe design an auto-restart which saves the state, shuts itself down and then relaunches itself and loads the data?

This could be done as a fail safe when memory consumption get's too high.

All of them would show growing memory time, some worse than others. You can see a lot of difference in them - gui programs, terminal programs, network server programs. But, I did write it all myself, so it could be a mistake I keep on making.

So far, I basically tracked down the terminal emulator things to being inefficient scrollback storage. I made the structs smaller and limited the amount saved more than before and cut this by half. The ddoc search was keeping the index in memory, that's fixed, but it still shows growing usage over time. Of course, restarting that is trivial if need be, but still, I wanna make sure I am doing it right too - especially if it is one of my underlying libraries to blame.

Gonna have to be one of those things you track down because it could be something as simple as the GC or something more serious.


You might have hook in to the GC and just write out stats, I believe there is a stats collector somewhere though.

Yes, indeed. I am starting to make serious progress now - mostly the fault is me storing excessive histories inefficiently. Should have been obvious in retrospect, but I didn't realize just how much overhead there was in my designs!


D should have a very good memory statistics library built(I guess it has something with the switches)... since it should have no issues tracking memory usage.

Every memory allocation must have a corresponding deallocation for stable programs. All allocations and deallocations have specific file locations or occur in the GC.

I don't see why it would be difficult to monitor this stuff. As I mentioned, I generally never use new precisely so I can track this stuff myself and have a nice printout of memory usage when I need it and even verify the net memory allocation 0 zero on program exit. I haven't messed with the GC but I imagine it too shouldn't be hard to add the info too.


Reply via email to