Вы изобретаете велосипед (и неправильно ). Используйте jq
для создания JSON.
lsof -Pn |
awk '/LISTEN/ {print $1,$2,$3,$4, $5,$8,$9}' |
jq -R 'split(" ") |
{
command:.[0],
pid:.[1],
user:.[2],
fd:.[3],
protocol: "\(.[4]):\(.[5])",
host:.[6]
}'
Если ваша версия jq
поддерживает регулярные выражения, вы также можете отказаться от вызова awk
:
lsof -Pn | jq -R '
select(match("LISTEN")) |
[splits(" *")] |
{
command:.[0],
pid:.[1],
user:.[2],
fd:.[3],
protocol: "\(.[4]):\(.[7])",
host:.[8]
}'
Я понял проблему.
С двумя изменениями я смог увидеть примерно 2G / 4K = 524 288 ошибок страниц. (ровно 524 304 ).
Почему вы видите ошибки страниц в памяти, которые записываются в первый раз для каждой страницы? Это больше -или -меньше наихудшего результата для подсистемы виртуальной памяти. В результате любая оптимизация, кэширование, предварительная загрузка, обнаружение схемы доступа и т. д. уменьшат это число. Я был бы удивлен, если бы ЛЮБАЯ операционная система надежно дала вам расчетные 256 тысяч ошибок страниц, если бы вы попробовали это.
Вы скомпилировали его с включенной оптимизацией, и компилятор удалил ваши циклы , clang преобразует всю вашу программу в:
int main() {
while(1);
}