tmux с использованием 1G RAM даже после очистки всей истории прокрутки

Я использую tmux (на самом деле byobu с tmux backend) на ubuntu 14.04.

Мой tmux использует 1 ГБ памяти (VIRT и RES in top), и я уже использовал команду clear-history.

Теперь мой прокрутка отключена, но использование памяти не снижается.

Этот tmux работал в течение долгого времени, и через него прокручивалось много текста. top показывает, что он использовал более 1 часа времени процессора.

Что может быть причиной?

Может ли быть утечка памяти?

Что я могу попробовать?

Я не могу перезапустить его или делать опасные вещи, потому что сеанс запускает эксперимент, который занимает около одной недели, чтобы завершить...

Ответ 1

Кажется, что была ошибка в tmux, в результате чего память не освобождалась при ясной истории.

Эта ошибка существовала вплоть до версии 1.9a, исправленной в версии 2.0. Я отправляю это как последний ответ, так как версия 1.9a по-прежнему используется (по крайней мере, со мной).

https://groups.google.com/forum/#!topic/tmux-users/WiSZy6ft1As https://github.com/tmux/tmux/commit/28f23f18e9d79405a60348c4f7aeded33da9135b

Ответ 2

Поскольку никто не ответил на это, я буду предлагать свои предположения о том, что происходит.

tmux выделяет пространство в памяти для своей истории, и эта память растет, когда вы используете больше своей истории. Очистка истории делает ее невидимой, но не освобождает фактическую память. Это означает, что tmux может использовать память для общего количества строк для каждой открытой панели, независимо от того, содержат ли эти панели в настоящее время что-либо в них.

Это, возможно, ошибка, или лучшая особенность в лучшем случае.

У меня нет решения.

Ответ 3

Это не ошибка, tmux немедленно освобождает память, когда вы очищаете историю. Это до glibc, чтобы вернуть его в ядро, и это плохо. Вы должны уметь видеть, что память свободна, потому что, если вы очистите историю на 10000 строк, использование памяти не будет расти снова, пока история снова не достигнет 10000 строк.

Ответ 4

Другая утечка памяти была зафиксирована в tmux 2.5:

* Handle slow terminals and fast output better: when the amount of data
  outstanding gets too large, discard output until it is drained and we are
  able to do a full redraw. Prevents tmux sitting on a huge buffer that the
  terminal will take forever to consume.

* Do not redraw a client unless we realistically think it can accept the data -
  defer redraws until the client has nothing else waiting to write.

https://github.com/tmux/tmux/blob/91b220525b0406763dafb6698d2741bec580bc10/CHANGES#L257-L263