Вообщем переодически сервер дохнет по: The WebLogic Server encountered a critical failure java.lang.OutOfMemoryError: Metaspace Reason: There is a panic condition in the server. The server is configured to exit on panic И хотя это гавно пишет типа Reason: There is a panic condition in the server. The server is configured to exit on panic чёт ни хуя он ни куда не exit.... Вообщем т.к разбираться с тем чем он жрётся нет ни времени ни желания (оно обязательно появится)... как вариант можно приделать костыль... костыль будет заключаться в ребуте сервера при возникновении этой ошибки. Что значит для этого надо... Желания и понимание что так жить нельзя, и вообще... Делаем новый модуль называем скажем: Reboot-OOMMetaSpace Идём в в новый модуль делаем Policy: Называем его OOM-Metaspace и говорит что это Server log: Жмём next в Configuration Policy пишем: log.logMessage.contains('java.lang.OutOfMemoryError: Metaspace'...
Мы хотим преобразовывать буквенное (я бы даже сказал 3х буквенное) название месяца в числовое, например "Apr" в "4" и т.д
Очень интересное решение:
http://stackoverflow.com/questions/1158579/modification-of-date-format-within-a-text-file
Выглядит так:
$ echo |awk -v mon="SEP" '{mm=(index(":JAN:FEB:MAR:APR:MAY:JUN:JUL:AUG:SEP:OCT:NOV:DEC",mon)+2)/4; print mm}'
4
или
$ echo |awk -v mon="APR" '{mm=(index(":JAN:FEB:MAR:APR:MAY:JUN:JUL:AUG:SEP:OCT:NOV:DEC",mon)+2)/4; print mm}'
9
Гениально!!!=)
Там так же есть пояснение как это работает:
Очень интересное решение:
http://stackoverflow.com/questions/1158579/modification-of-date-format-within-a-text-file
Выглядит так:
$ echo |awk -v mon="SEP" '{mm=(index(":JAN:FEB:MAR:APR:MAY:JUN:JUL:AUG:SEP:OCT:NOV:DEC",mon)+2)/4; print mm}'
4
или
$ echo |awk -v mon="APR" '{mm=(index(":JAN:FEB:MAR:APR:MAY:JUN:JUL:AUG:SEP:OCT:NOV:DEC",mon)+2)/4; print mm}'
9
Гениально!!!=)
Там так же есть пояснение как это работает:
Text Pos +2 /4
---- --- -- --
JAN 2 4 1
FEB 6 8 2
MAR 10 12 3
APR 14 16 4
MAY 18 20 5
JUN 22 24 6
JUL 26 28 7
AUG 30 32 8
SEP 34 36 9
OCT 38 40 10
NOV 42 44 11
DEC 46 48 12
В догонку:
Использование awk внутри awk:
Предположим мы хотим с помощью awk получить дату в seconds since 1970-01-01 00:00:00 UTC
В awk этим рулит функция
Turn datespec into a timestamp in the same form as is returned by
mktime(datespec)
systime()
. It is similar to the function of the same name in ISO C. The argument, datespec, is a string of the form "YYYY MM DD HH MM SS [DST]"
. The string consists of six or seven numbers representing, respectively, the full year including century, the month from 1 to 12, the day of the month from 1 to 31, the hour of the day from 0 to 23, the minute from 0 to 59, the second from 0 to 60,54 and an optional daylight-savings flag.
На вход у нас есть строка вида: 127.0.0.1 - - [05/13/2014 02:15:53]
В качестве разделителя будем спользовать 3 символа -F[\]\[\ ]:
1. ]
2. [
3. space (пробел)
В итоге выглядит так:
$ echo "127.0.0.1 - - [05/13/2014 02:15:53]" | awk -F[\]\[\ ] '{
> v=($5" "$6);
> print v;
> split(v,fulldate," ");
> split(fulldate[1],date,"/");
> split(fulldate[2],time,":");
> filetime=mktime(date[3]" "date[1]" "date[2]" "time[1]" "time[2]" "time[3]);
> print filetime;}'
05/13/2014 02:15:53
1399932953
v=($5" "$6); - вырезаем необходимую дату
05/13/2014 02:15:53
split(v,fulldate," "); - формируем массив
fulldate из переменной v разделитель " "(space)
т.е в массиве fulldate два элемента:
1. 05/13/2014
2. 02:15:53
Дальше по аналогии массив fulldate разбивается еще на два массива и
результат сортируется так что бы его можно было скормить mktime
Комментарии
Отправить комментарий