Вы просите меня угадать и установить для него верхнюю границу.
Могу попробовать поделиться своим опытом. Я не говорю, что вы не должны требовать высоких стандартов, я просто хочу реалистично относиться к стандарту, которому в настоящее время соответствует Linux :-).
С вашим объемом ОЗУ, подкачкой и типом хранилища. Если использование оперативной памяти связано с несколькими интерактивными приложениями. Взаимодействие происходит только с одним из них. Вы не оставили операцию запущенной ни в одном из других приложений. А в других приложениях нет большого количества вкладок с анимированной рекламой :). В таком случае, я думаю, вы делаете хорошее замечание! Моя текущая интуиция подсказывает, что необычно 10 минут для того, чтобы система прояснилась и заработала.
Считаю ли я, что вам стоит когда-нибудь подождать 10 минут , надеясь, что курсор мыши заработает и свет диска снова успокоится?
Не совсем так. Если надежда состоит в том, чтобы дождаться, пока графический интерфейс установится и станет пригодным для использования? Если для использования графического интерфейса потребуется даже 2 минуты , и моя цель состоит не только в том, чтобы начать закрывать некоторые окна текущего приложения переднего плана? Вы ожидаете, что эта задержка будет продолжаться снова. Это явно слишком долго.
Но, во-вторых, это может быть связано с различными возможными проблемами. Например, если половина проблемы заключается в параллельной операции во второй программе, о которой я не знаю, то рабочий набор системы может быть больше, чем ОЗУ. В таком случае, да, система может работать больше часов, чем вы можете сосчитать . Таким образом, вы не хотели бы ждать.
Если бы я пытался понять, что происходит не так , мой максимальный тайм-аут мог бы быть 15 минут . Это будет общее время ожидания для получения данных из последовательности, такой как:
sudo tmux
-текстовый оконный менеджер. Теперь я могу запускать несколько команд от имени пользователя root и переключаться между ними без задержек при входе в систему или sudo. atop -R
-я упоминал, что люблю atop
? iotop
-Ужасные задержки обычно связаны с вводом-выводом. Это хороший инструмент, который делает одну вещь :-). journalctl --since=-1hour -f
Сzsh
:
files=(./input-file*(Nn.) )
typeset -Z3 n=1
while
(( $#files > 0 )) &&
cat $files[1,50] > merged-file$n.txt &&
rm -f $files[1,50]
do
files[1,50]=()
((n++))
done
Там ./input-file*(Nn.)
расширяется до файлов, которые соответствуют ./input-file*
, но с 3 квалификаторами glob дополнительно классифицируют это:
N
:nullglob :заставляет глобус расширяться до нуля вместо прерывания с ошибкой при отсутствии совпадений. Это то, что вам часто нужно при установке массива из глобуса, и это нормально, если этот массив в конце будет пустым:n
:numericglobsort
:изменить сортировку с лексической по умолчанию на числовую (в результате комбинации обоих ), так что input-file2
сортирует, например, раньше input-file10
. .
:ограничиться обычными файлами (игнорировать каталоги, символические ссылки, FIFO...)typeset -Z3 n
делает $n
переменным нулем -, дополненным до ширины 3, поэтому мы получаем merged-file001.txt
,... merged-file049.txt
...
Затем мы зацикливаемся до тех пор, пока в массиве $files
есть элементы и нет ошибок,объединение пакетов по 50 за раз (и всего, что осталось для последнего пакета ).
То же самое с инструментами bash 4.4+ и GNU:
readarray -td '' files < <(
LC_ALL=C find. -maxdepth 1 -name 'input-file*' -type f -print0 |
sort -zV
)
n=0
set -- "${files[@]}"
while
(( $# > 0 )) &&
printf -v padded_n %03d "$n" &&
cat "${@:0:50}" > "merged-file$padded_n.txt" &&
rm -f "${@:0:50}"
do
shift "$(( $# >= 50 ? 50 : $# ))"
((n++))
done
Где find
выполняет работу zsh ./input-file*(N.)
, sort -V
выполняет числовую (версию )сортировку, и мы используем позиционные параметры и shift
в цикле, поскольку bash
массивы довольно ограниченное.
Этот скрипт:
sort
для численной (сортировки,по версии )и k
файлов (количество переменных)dir="myDir"
readarray -td $'\0' files < <(
for f in./"$dir"/in-file*; do
if [[ -f "$f" ]]; then printf '%s\0' "$f"; fi
done |
sort -zV
)
k=50
rm -f./"$dir"/joined-files*.txt
for i in "${!files[@]}"; do
n=$((i/k+1))
cat "${files[i]}" >>./"$dir"/joined-files$n.txt &&
rm -f "${files[i]}"
done