- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
// старый "медленый" код, проверяем размеры по именам файлов (последний параметр):
if((checkFileLimits(_logTimeLimit,_logSizeLimit,_logStartTime,_traceFile1)>0) ||
(checkFileLimits(_logTimeLimit,_logSizeLimit,_logStartTime,_traceFile2)>0) ||
(checkFileLimits(_logTimeLimit,_logSizeLimit,_logStartTime,_traceFile3)>0) ||
(checkFileLimits(_logTimeLimit,_logSizeLimit,_logStartTime,_traceFile) >0) )
// новый "быстрый" код, проверяем размеры по файл хэндлам:
FILE* fp1 = fopen(_traceFile1, "r");
FILE* fp2 = fopen(_traceFile2, "r");
FILE* fp3 = fopen(_traceFile3, "r");
FILE* fp4 = fopen(_traceFile, "r");
if((checkFileLimitsHandle(_logTimeLimit,_logSizeLimit,_logStartTime,fp1)>0) ||
(checkFileLimitsHandle(_logTimeLimit,_logSizeLimit,_logStartTime,fp2)>0) ||
(checkFileLimitsHandle(_logTimeLimit,_logSizeLimit,_logStartTime,fp3)>0) ||
(checkFileLimitsHandle(_logTimeLimit,_logSizeLimit,_logStartTime,fp4) >0) )
setTraceFile(NULL);
fclose(fp1);
fclose(fp2);
fclose(fp3);
fclose(fp4);
наши бенчмаркеры чего-то там тестировали (на NFS!!!) и нашли что некоторые модули/библиотеки используют stat() вместо fstat()/ftell() для определения размера лог/трейс файлов (для ротации этих файлов). stat() берет как параметр не хэндл, а имя файла и поэтому дороже с точки зрения производительности. в особенности на NFS. ну начальник R&D и постановил: все stat()ы заменить на fstat()/ftell(). сказано - сделано. кусок сверху из модуля который пользуется внешней либой для логов и трейсов и у которого доступа к хэндлам нету. но герои не ищут легких путей: открываем файлы, получаем хэндлы, проверяем оптимальным образом размер файлов по хэндлам, закрываем файлы, гатова!
Lure Of Chaos 14.12.2011 20:06 # 0
Dummy00001 14.12.2011 21:27 # 0
defecate-plusplus 14.12.2011 21:48 # 0
Dummy00001 15.12.2011 00:16 # 0
defecate-plusplus 15.12.2011 06:31 # +1
если первое, то лог файл не нужно открывать/закрывать при каждой записи в оный, при открытии нового лог-файла установить счетчик в 0 и считать в нем сколько мы в реальности успели в лог-файл записать, перед очередной записью проверять лишь условие ротации по дате (полагаю, каждые 24 часа означает ротацию в 00:00, тогда нет проблем, если же реально 24h с момента создания текущего файла, то придется дополнительно запоминать время его создания, например) и условие по переполнению - если условия выполняются, меняемся на новый файл и производим очередную запись.
если второе (да еще и по NFS), то что то вы там переусложнили.
Dummy00001 15.12.2011 18:41 # +1
мне с начала моей работы в фирме предупредили что "R&D мелочами не занимается, и делает только сверх-важные вещи." восприняв до всей глубины сказаное, представь себе что получается на выходе если их попросить написать программу для подсчета "2*2".
defecate-plusplus 15.12.2011 20:25 # +1
а еще логами можно гадить по udp (на крайняк по tcp) на отдельный сервер, который уже знает что делать с ними, куда ротировать и что игнорировать
eth0 16.12.2011 17:52 # 0
Dummy00001 16.12.2011 17:55 # 0
eth0 16.12.2011 19:16 # 0
WGH 15.12.2011 00:18 # +4
istem 15.12.2011 01:20 # +3
gegMOPO4 15.12.2011 18:18 # +3
SmackMyBitchUp 15.12.2011 20:42 # 0
SadKo 15.12.2011 18:59 # 0
guest8 09.04.2019 12:22 # −999