Много языков программирования имеют специальное представление для понятия “истинных” и “ложных”. Такие языки обычно используют специальную истину и ложь констант или возможно их прописные эквиваленты. Однако awk отличается. Это одалживает очень простое понятие истины и лжи от C. В awk, любом ненулевом числовом значении или любом значении непустой строки верно. Любое другое значение (нуль или пустая строка, "") является ложью.
Да, то использование является портативным и будущим безопасным.
Заметка на полях, это показывает Ваш второй пример,
echo 'b-does-print-$0' | awk '$0'
не распечатает каждую строку, только те, что awk интерпретирует как истинная строка, т.е. пустая строка или строка, содержащая только способ записать номер 0 (0
, 00
, 0.0e3
, -.0
, …).
Я копирую это со страницы справочника, которую я записал для plog, так как я пытался прояснить там:
Важно понять различие между виртуальным адресным пространством и физической памятью в интерпретации некоторых вышеупомянутых статистических данных. Поскольку имя подразумевает, виртуальное адресное пространство не реально; это - в основном карта всей памяти, в настоящее время выделяемой процессу. Предел на размер этой карты является тем же для каждого, обрабатывает (обычно, 2-4 ГБ), и это не накапливается (т.е., у Вас могут быть десятки или сотни процессов, каждый с ее собственным виртуальным адресным пространством на 2-4 ГБ, в системе, которая только на самом деле имеет 512 МБ физической памяти).
Данные не могут на самом деле храниться или получаться от виртуального адресного пространства; реальные данные требуют реальной, физической памяти. Это - задание ядра для управления один относительно другого. Виртуальная статистика пространства (VirtualSz, Data+Stack и Priv&Write) полезна для рассмотрения структуры процесса и отношений к использованию физической памяти, но относительно суммы RAM, на самом деле используемой, статистика физической памяти (ResidentSz, Доля и Пропорция) что количества.
Вершина не вполне имеет всех тех метрик, но счет VIRT является виртуальным адресным пространством, RES относится к физической памяти, как делает SHR. Если Вы обеспокоены относительным использованием памяти (т.е., один процесс по сравнению с другим), счет RES более релевантен.
Определенные части VIRT релевантны относительно других процессов; щитки, такие как openVZ ограничивают контейнеры на основе общей суммы частного перезаписываемого адресного пространства, не RSS. Вершина не сообщает об этом, но pmap и plog делают (см. plog страницу справочника для "Priv&Write"; это было на самом деле частью моего повода при записи этого).
Согласно выводу Вашей вершины, кажется, что существует проблема в Ваших сценариях PHP, можно проверить
Я уверен, что высокая загрузка из-за php, можно просто уничтожить процессы php путем выполнения
killall -9 php
Или pkill -9 php
затем Наблюдайте в вершине.
man proc
, но (Linux) ядро (с 2.6.something?) сообщает фигура Pss в/proc/<pid>/smaps
. Это похоже на RSS ("RES" вершины) кроме него просто неразделенное пространство плюс общие регионы, разделенные на количество других процессов, совместно использующих их, который довольно удобен. К сожалению, вершина не сообщает что (но plog делает ;)). Просто вычитание SHR от RES не очень точно, потому что SHR реален. Если существует только два процесса, получающие доступ к библиотеке, то пространство "совместно используется", но не очень. – goldilocks 16.02.2013, 17:01ps -A -o state,pid,comm | grep "^D"
. Если Вы видите что-нибудь, то у Вас может быть дисковое повреждение, которое вызовет систему ввод-вывод занятый цикл (Google "бесперебойный сон"). Это - все, о чем я могу думать, не зная ничто больше о самой системе. Это - маловероятный tho, поскольку я думаю, что те процессы D были бы очевидны с высоким использованием ЦП в вершине. – goldilocks 16.02.2013, 18:54