grayich |
|
Темы:
235
Сообщения:
2294
Участник с: 08 января 2009
|
так этож и есть лень, в своей полезной форме ) |
yozan |
|
Темы:
0
Сообщения:
32
Участник с: 15 марта 2012
|
или так:$ cat /home/uniq-ex120201.log|while read n; do curl -Is "$n" | grep Content-Length >>sums.txt & ; done $ awk '{ SUM += $2} END { print SUM }' sums.txt |
sleepycat |
|
![]()
Темы:
98
Сообщения:
3291
Участник с: 19 июля 2011
|
Если админ не ленивый, то это не настоящий админ, вариантЛень, чувство юмора, немытая чашка - сакральные черты админа ))
Лозунг у них был такой: "Познание бесконечности требует бесконечного времени". С этим я не спорил, но они делали из этого неожиданный вывод: "А потому работай не работай — все едино". И в интересах неувеличения энтропии Вселенной они не работали. (с)
|
zubastiy |
|
Темы:
136
Сообщения:
548
Участник с: 18 сентября 2009
|
yozan вот так “дешевле” for n in `cat /home/uniq-ex120201.log`; do curl -I " .... вообще по факту, оба предложенных варианта порождают тучи запросов (что логично ввиду наличия &) - все упирается в скорость порождения процессов. за 2000 штук запросов живет одномоментно. в результате бэкенд часть запросов дропнул, придется как то обуздать стихию )) |
Natrio |
|
Темы:
48
Сообщения:
4771
Участник с: 08 января 2011
|
zubastiyВообще-то я для того и задал количество одновременных процессов (у меня 10, можно выставить больше или меньше), чтобы их не стало слишком много – иначе получается нечто сильно похожее на форк-бомбу. |
zubastiy |
|
Темы:
136
Сообщения:
548
Участник с: 18 сентября 2009
|
NatriozubastiyВообще-то я для того и задал количество одновременных процессов (у меня 10, можно выставить больше или меньше), чтобы их не стало слишком много – иначе получается нечто сильно похожее на форк-бомбу. кажется нашел. допустим файл 1000 строк let S=W/10 # делим на десять процессов получили порцию в 100 строк sed -n “$i,$((i+S))p” $file | funct &100 строк передали на подсчет. … а если в файле миллион - то и породится 100 тыщ процессов чтобы по десять процессов работало, по идее нужно так # цикл создания процессов file=file.log # берём этот список W=`wc -l < $file` # считаем строки S=10 #объявляем нужное колво процессов for ((i=1;i<=W;i+=S+1)) do # берём порцию строк и направляем на стандартный ввод экземпляру функции подсчёта sed -n "$i,$((i+S))p" $file | funct & done |
zubastiy |
|
Темы:
136
Сообщения:
548
Участник с: 18 сентября 2009
|
получилось вот такой скрипт по подсчету sh scripts/cont.sh /home/uniq-ex120203.log 10 | awk ‘{a+=$1}END{print a}’ #!bin/bash W=`wc -l < $1` let S=$2 for ((i=1;i<=W;i+=S+1)) do for q in `sed -n "$i,$((i+S))p" $1` do curl -Is "`echo $q`" | grep Content-Length | cut -f2 -d" " & done | awk '{a+=$1}END{print a}' done спасибо откликнувшмся за ценные замечания. опять полезное погружение в проблему получилось, праздник ) ЗЫ Результаты прогона тестовых запросов (по 5-10 тысяч ссылок) показали что при запросах попадающих в кеш бэкенда, увеличение колва потоков запросов больше 2 не влияет на общую скорость. При 10 тыщ запросах в один поток было потрачено 2 минуты 7 секунд Теже 10 тыщ запросов в 2 потока - 1 минута 10 секунд Теже 10 тыщ запросов в 10 потоков - 1 минута 7 секунд Если запрос не попадает в кеш, то уровень многопоточности начинает сказываться. Рестартанул сервис с картинками, однопотоковый запрос - 200к отработал за 200 минут Рестартанул сервис с картинками, 80 потоковый запрос - 200к отработал за 52 минуты Рестартанул сервис с картинками, 10 потоковый запрос - 200к отработал за 78 минут |
Natrio |
|
Темы:
48
Сообщения:
4771
Участник с: 08 января 2011
|
zubastiyОооо боже!… :) Простите, я же не предлагал форкать каждый запрос! Я потому и предложил разделить обработку на ФИКСИРОВАННОЕ (у меня 10) количество параллельных процессов, чтобы каждый из них у себя внутри выдавал запросы ПОСЛЕДОВАТЕЛЬНО. |
zubastiy |
|
Темы:
136
Сообщения:
548
Участник с: 18 сентября 2009
|
NatrioЫыы. Вот я … назаблуждался то )zubastiyОооо боже!… :) Спасибо еще раз. Пошел думать как функцию написать с stdin |
Natrio |
|
Темы:
48
Сообщения:
4771
Участник с: 08 января 2011
|
Что значит как? Так же, как и скрипт.funct() { while read line do команда $line ... done } |