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

Параметр командной строки -vsep = $ SEPERATOR устанавливает для переменной awk sep (которая используется при поиске / замене) все, что вы укажете. ; в вашем случае.

# NR = Number of current Record, or line number
# Skip the first line
if ( NR > 2 ) {

  # NF = Number of fields in the current record
  # If the line contains something other than a blank line or the 
  # awk field separator characters (whitespace by default)
  if ( NF ) {

    # If we have not seen a blank line (script flag s)
    if ( !s ) {

      # Search the current line repeatedly (gsub) for any number of spaces (" *") 
      # before a ";" then any number of spaces or tabs ([ \t]*) after the `;`
      # and replace it all with just a ";"
      gsub( " *"sep"[ \t]*", sep );

      # Print the line number, 0 based (NR-2) as a signed decimal integer (`%d`)
      # then the complete line ($0) followed by a new line character (\n)
      printf "%d%s\n", NR-2, $0;
    }

  } else { 

    # Set the "seen a blank line" flag
    s = 1
  }

}

имя_файла> новый_файл записывает вывод в новый файл с именем новый_файл

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

awk -vsep=$SEPERATOR '{

# Skip the first line
if (NR == 1) { next; }

# Stop processing if we see a blank line
if (NF == 0) { exit; }

# Remove spaces before and spaces/tabs after separator
gsub( " *"sep"[ \t]*", sep );

# Print the line with a record number starting from 0
printf "%d%s\n", NR-2, $0;

}' file_name > new_file
0
17.03.2018, 14:35
1 ответ

Я думаю, вы ищете /proc/sys/vm/overcommit_memory, для которого вам следует установить значение 2, чтобы обеспечить принудительную проверку выделения памяти (программы не смогут выделить больше памяти, чем реально доступно ). Вам, вероятно, также потребуется настроить /proc/sys/vm/overcommit_ratio, по крайней мере, если какой-либо из ваших программ необходимо выделить более половины установленной памяти. Все это документировано на procfsсправочной странице .

Я бы порекомендовал пересмотреть ваше решение отключить все ваши свопы; см. Зачем Linux нужно пространство подкачки в виртуальной машине? для получения подробной информации.

Стоит отметить, что ядро ​​не может выполнить подкачку, если подкачка отключена. Все, что он может сделать, это использовать сопоставленные файлы в качестве резервного хранилища, но это обычно не требует написания (, в частности, для исполняемых файлов и библиотек ). Если вы видите записи в состоянии стресса, это, вероятно, связано с тем, что ядро ​​сбрасывает грязные страницы (в основном из своих буферов ), чтобы попытаться восстановить их.

0
28.01.2020, 04:28

Теги

Похожие вопросы