timo-71

Рейтинг
63
Регистрация
19.09.2018
LEOnidUKG #:
Вы тут доказываете, что нагрузка процессора влияет на выполнение PHP?! Серьёзно?

Про загрузку проца, вроде ничего не говорил. Посыл больше к этому:

timo-71 #:

$ sudo cat /proc/loadavg
0.08 0.33 0.50 2/1876 53130  #все спокойно


$ sudo cat /proc/loadavg    #аб тест 15000 запросов на локальный сайт nginx+php-fpm
5.30 1.42 0.78 59/1939 54025 

В 1 случае 2 активных процесса, во втором 59.

$ apachectl -V | grep -i mpm
Server MPM:     prefork

Каждый хтмл, имеет, пусть 30 цсс, джиэс, картинок, шрифтов и т.д. prefork => каждый запрос - процесс. В отличии от нгинкс Пусть 100 одновременных запросов. Спрогнозируйте load average

Сейчас, еще раз пустил. Как то так

LEOnidUKG #:
Я думаю лучше это включить архивирование 10 ГБ файла, а потом уже делать проверку PHP из консоле.
Нет смысла, очереди процессов не будет.
LEOnidUKG #:
т.е. по вашему если апатч удалить, то у вас в консоле PHP перестанет работать? 

А где про это? Вы не поняли суть. Про апач только это

timo-71 #:

Если апач

$ apachectl -V | grep -i mpm
Server MPM:     prefork

То: на каждый запрос - дочерний процесс, с вытекающими... Про 2 других варианта, не скажу, но  тоже вроде как нгинкс не обгоняют.

Иными словами, если апач prefork, картинка в top будет похожая,

 PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                    
  54020 www       20   0  684828  36104  23936 R  26,2   0,2   0:30.67 php-fpm                                                                    
  54259 www       20   0  684828  37000  25152 S  25,8   0,2   0:23.47 php-fpm                                                                    
  54019 www       20   0  684828  36104  23936 R  24,5   0,2   0:28.80 php-fpm 

только вместо зрз-азь будут процессы апача.

Еще раз суть эксперимента.

Запустили зрз скрипт из консоли. Код в цитируемом сообщении есть. Прочитать 56мб джисон (46943 шин) и декодировать.

$ php -f /home/www_data/pyh.php #при "все спокойно"
phpversion: 8.0.1
Time: 221.245ms; Mem: 168391056; PeakMem: 168391408; StrLen:56570903; Count: 46943
Time: 198.521ms; Mem: 168391056; PeakMem: 168391416; StrLen:56570903; Count: 46943

~ 200 мс

запустили ab -n 15000 -c 100 -H "User-Agent:Mozilla"   http://p.php/  Имитируем нагрузку.

И пока оно 15000 запросов делает, пускаем тот же скрипт из консоли

#при "нагрузке"
$ php -f /home/www_data/pyh.php
phpversion: 8.0.1
Time: 410.268ms; Mem: 168391056; PeakMem: 168391408; StrLen:56570903; Count: 46943
Time: 571.403ms; Mem: 168391056; PeakMem: 168391416; StrLen:56570903; Count: 46943
Time: 533.022ms; Mem: 168391056; PeakMem: 168391416; StrLen:56570903; Count: 46943

Миллисекунд понадобилось более чем в 2 раза.

По моему, весьма наглядно.


Зы: если смущает ,  http://p.php/ то все просто. локальная зона php обрабатывается. httpd на этой машине дизаблед

server {

    server_name    ~^(.*?)\.?(?<d_name>[^\.]+)\.php$;
    set        $sub_name    $1;
    set        $x_root /var/www/php/$d_name/public;
....

fastcgi_pass unix:/var/run/php-fpm/www.sock;
....
$ sudo systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/httpd.service.d
   Active: inactive (dead)

Dmitriy_2014 #:
почему один и тот же код он может обрабатывать по-разному


Эксперимент:

Загрузка системы на разных этапах

$ sudo cat /proc/loadavg
0.08 0.33 0.50 2/1876 53130  #все спокойно


$ sudo cat /proc/loadavg    #аб тест 15000 запросов на локальный сайт nginx+php-fpm
5.30 1.42 0.78 59/1939 54025 

Параллельно, выполнение пхп скрипта из консоли

$ sudo cat  /home/www_data/pyh.php 
<?php
ini_set('memory_limit', '256M');

function a(){
    $t = microtime(1);
    $f = file_get_contents('/var/www/aweb/pyenv/pyc/data/tyres.json');

    $o = json_decode($f, 1);

    printf("Time: %.3fms; Mem: %s; PeakMem: %s; StrLen:%s; Count: %s \n",
        (microtime(1) - $t) * 1000,
        memory_get_usage(),
        memory_get_peak_usage(),
        strlen($f),
        count($o) );
}

echo 'phpversion: ', phpversion(), "\n";

for($i=0;$i<10;$i++) {
    a();
}


$ php -f /home/www_data/pyh.php #при "все спокойно"
phpversion: 8.0.1
Time: 221.245ms; Mem: 168391056; PeakMem: 168391408; StrLen:56570903; Count: 46943
Time: 198.521ms; Mem: 168391056; PeakMem: 168391416; StrLen:56570903; Count: 46943
Time: 196.069ms; Mem: 168391056; PeakMem: 168391416; StrLen:56570903; Count: 46943
Time: 199.956ms; Mem: 168391056; PeakMem: 168391416; StrLen:56570903; Count: 46943
Time: 193.900ms; Mem: 168391056; PeakMem: 168391416; StrLen:56570903; Count: 46943
Time: 197.802ms; Mem: 168391056; PeakMem: 168391416; StrLen:56570903; Count: 46943
Time: 193.995ms; Mem: 168391056; PeakMem: 168391416; StrLen:56570903; Count: 46943
Time: 196.462ms; Mem: 168391056; PeakMem: 168391416; StrLen:56570903; Count: 46943
Time: 194.906ms; Mem: 168391056; PeakMem: 168391416; StrLen:56570903; Count: 46943
Time: 197.961ms; Mem: 168391056; PeakMem: 168391416; StrLen:56570903; Count: 46943

#при "нагрузке"
$ php -f /home/www_data/pyh.php
phpversion: 8.0.1
Time: 410.268ms; Mem: 168391056; PeakMem: 168391408; StrLen:56570903; Count: 46943
Time: 571.403ms; Mem: 168391056; PeakMem: 168391416; StrLen:56570903; Count: 46943
Time: 533.022ms; Mem: 168391056; PeakMem: 168391416; StrLen:56570903; Count: 46943
Time: 478.733ms; Mem: 168391056; PeakMem: 168391416; StrLen:56570903; Count: 46943
Time: 374.619ms; Mem: 168391056; PeakMem: 168391416; StrLen:56570903; Count: 46943
Time: 420.019ms; Mem: 168391056; PeakMem: 168391416; StrLen:56570903; Count: 46943
Time: 578.432ms; Mem: 168391056; PeakMem: 168391416; StrLen:56570903; Count: 46943
Time: 413.064ms; Mem: 168391056; PeakMem: 168391416; StrLen:56570903; Count: 46943
Time: 371.348ms; Mem: 168391056; PeakMem: 168391416; StrLen:56570903; Count: 46943
Time: 440.448ms; Mem: 168391056; PeakMem: 168391416; StrLen:56570903; Count: 46943

top при нагрузке


    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                    
  54020 www       20   0  684828  36104  23936 R  26,2   0,2   0:30.67 php-fpm                                                                    
  54259 www       20   0  684828  37000  25152 S  25,8   0,2   0:23.47 php-fpm                                                                    
  54019 www       20   0  684828  36104  23936 R  24,5   0,2   0:28.80 php-fpm                                                                    
  54006 www       20   0  684828  36092  23924 R  24,2   0,2   0:28.85 php-fpm                                                                    
  54263 www       20   0  684828  37000  25152 S  24,2   0,2   0:27.60 php-fpm                                                                    
  54007 www       20   0  684828  36092  23924 S  22,5   0,2   0:29.76 php-fpm                                                                    
  54258 www       20   0  684828  36992  25152 S  21,9   0,2   0:24.66 php-fpm                                                                    
  54269 www       20   0  684828  37000  25152 S  21,9   0,2   0:22.90 php-fpm                                                                    
  54256 www       20   0  684828  37000  25152 S  21,5   0,2   0:26.28 php-fpm                                                                    
  54267 www       20   0  684828  37000  25152 S  21,5   0,2   0:21.89 php-fpm                                                                    
  54010 www       20   0  684828  36096  23928 S  21,2   0,2   0:29.62 php-fpm                                                                    
  54265 www       20   0  684828  36996  25152 R  21,2   0,2   0:24.30 php-fpm                                                                    
  54023 www       20   0  684828  35784  23940 S  20,9   0,2   0:30.28 php-fpm                                                                    
  54250 www       20   0  684828  37004  25156 R  20,9   0,2   0:24.51 php-fpm                                                                    
  54264 www       20   0  684828  36996  25152 R  20,9   0,2   0:24.14 php-fpm                                                                    
  54003 www       20   0  684828  36092  23924 S  20,5   0,2   0:30.22 php-fpm                                                                    
  54009 www       20   0  684828  36100  23932 S  20,5   0,2   0:30.98 php-fpm                                                                    
  54253 www       20   0  684828  36996  25152 S  20,2   0,2   0:23.29 php-fpm                                                                    
  54268 www       20   0  684828  36996  25152 S  19,9   0,2   0:25.36 php-fpm                                                                    
  54004 www       20   0  684828  36092  23924 R  19,5   0,2   0:29.96 php-fpm                                                                    
  54005 www       20   0  684828  36088  23924 R  19,2   0,2   0:28.93 php-fpm                                                                    
  54257 www       20   0  684828  37000  25152 R  19,2   0,2   0:22.86 php-fpm                                                                    
  54252 www       20   0  684828  37000  25152 S  18,9   0,2   0:23.08 php-fpm                                                                    
  54016 www       20   0  684828  36100  23936 S  18,5   0,2   0:29.45 php-fpm                                                                    
  54262 www       20   0  684828  36996  25152 S  18,5   0,2   0:24.61 php-fpm                                                                    
  54017 www       20   0  684828  36096  23936 S  18,2   0,2   0:28.83 php-fpm                                                                    
  54018 www       20   0  684828  36104  23936 S  18,2   0,2   0:27.65 php-fpm                                                                    
  54021 www       20   0  684828  35784  23940 S  18,2   0,2   0:28.40 php-fpm                                                                    
  54008 www       20   0  684828  36096  23928 S  17,9   0,2   0:28.27 php-fpm

Наглядно показано, что скрипт из консоли выполняет код в 2 раза медленней при нагрузке. Если апач

$ apachectl -V | grep -i mpm
Server MPM:     prefork

То: на каждый запрос - дочерний процесс, с вытекающими... Про 2 других варианта, не скажу, но  тоже вроде как нгинкс не обгоняют.

Если ресурсов выше крыши, то это незаметно. А если поджимает, то ой.

Dmitriy_2014 :

PHP код обрабатывается одинаковое время, какой бы веб-сервер вы бы не использовали

Нет конечно, более того, даже если условия одинаковы - по разному. Например,

Dmitriy_2014 :
NGINX

В зависимости от циферок. 

load average: 
0,22, 0,56, 0,73
Tasks: 383 total,   2 running, 380 sleeping,   0 stopped,   1 zombie
%Cpu(s):   1,0 us,  0,2 sy,  0,0 ni, 98,6 id,  0,0 wa,  0,1 hi,  0,0 si,  0,0 st
MiB Mem :  15689,7 total,   5507,4 free,   4896,2 used,   5286,1 buff/cache

В конечном итоге - может быть и 5мс и 5с

Простой пример

Document Length:        121557 bytes

Concurrency Level:      300
Time taken for tests:   25.826 seconds
Complete requests:      15000
Failed requests:        0
Total transferred:      1830675000 bytes
HTML transferred:       1823355000 bytes
Requests per second:    580.81 [#/sec] (mean)
Time per request:       516.523 [ms] (mean)
Time per request:       1.722 [ms] (mean, across all concurrent requests)
Transfer rate:          69223.17 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        1    6  32.3      2     249
Processing:     3  507 835.8     75    9872
Waiting:        3  506 835.8     74    9872
Total:          4  513 838.2     77    9874

Percentage of the requests served within a certain time (ms)
  50%     77
  66%    415
  75%    789
  80%    849
  90%   1551
  95%   2225
  98%   3048
  99%   3722
100%   9874 (longest request)

На одной и той же машине, если ее нагрузить  запросами к сайту

ab -n 15000 -c 300 

(Requests per second:    580.81 [#/sec] (mean)) может быть от 4 миллисекунд до 10 секунд. При этом: load average: 2,07, 1,02, 0,75

Что касается апача - абстрактный пример. Что то занимает при это тесте 2% ЦПУ и 3% памяти. И можно, без этого.

PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND   
1630 clickho+  20   0   14,1g 490912 209656 S   2,0   3,1   6:56.95 clickhouse-serv

Вывод?


======

Добавлю, если спокойно, то на этом железе, так


SeVlad #:
А оказалось всё до банальности просто, но вместе с тем странно - одна и та же картинка, открываемая в винде через любую смотерлку (испробовано было несколько, не только ирфан) по цвету отличается от той же картинки открываемой в браузере.

Чуть, поясню. Напомню, это про  cmyk картинку. Вопрос, как из Cyan, Magenta, Yellow сделать  Red, Green, Blue

И чтобы более-менее похоже было.

Линукс по дефолту, похоже использует:
Red = 255 × ( 1 - Cyan ÷ 100 ) × ( 1 - Black ÷ 100 )
Green = 255 × ( 1 - Magenta ÷ 100 ) × ( 1 - Black ÷ 100 )
Blue = 255 × ( 1 - Yellow ÷ 100 ) × ( 1 - Black ÷ 100 )

Black это k в cmyk

Цвет пикселя с координатами 1008,8:

orig cmyk bit (182, 156, 149, 170)

cmyk %: (0.71, 0.61, 0.58, 0.67)

pil default = rgb(24, 33, 35) imagic profiles = rgb (45, 47, 44) irfan = rgb (49, 48, 44)


Онлайн сервисы дают rgb(24, 33, 35), как и линукс без профилей (суть формула выше).


Все стили из таблички визивиг потер (плохой)

<h2>orig cmyk bit (182, 156, 149, 170) 
    <br>cmyk %: (0.71, 0.61, 0.58, 0.67)</h2>
    <table>
      <tr>
        <td style="background:rgb(24, 33, 35);padding:15px;color:#fff;height:100px;width:33%">pil default = rgb(24, 33, 35) </td>
        <td style="background:rgb(45, 47, 44);padding:15px;color:#fff;height:100px;width:34%">imagic profiles = rgb (45, 47, 44)</td>
        <td style="background:rgb(49, 48, 44);padding:15px;color:#fff;height:100px;width:33%">irfan =  rgb (49, 48, 44) </td>
      </tr>
    </table>

Тогда картинкой:


SeVlad #:
Но тут опять почти случайно я обнаружил засаду - цвета искажены.

Оригинал картинки, на которой этот эффект проявился хотелось бы увидеть. Если можно, конечно.

Можно в личку, если она тут есть.

SeVlad #:
Уже и с --with-jpeg и с --with-modules делал

Там может просто библиотек соотвествующих нет

Попробуйте

./configure --disable-shared

Таким образом, похоже компилируется  без использования шаред библиотек.

Я проверить не смогу, потому что удаляя соотв. либы, удаляются зависимости, а их много...

Если не сработает, все же либы используются из наличия на машине, то еще вариант:

Вот тут, судя по всему либы - https://download.imagemagick.org/ImageMagick/download/delegates/  Которые , тоже можно поставить соответствующим образом, куда то в пользовательский каталог.

Судя по коду скрипта конфигурации ImageMagick, ключом --x_libraries  можно указать каталог, куда вы поставили либы

Пока, после конфигурации не увидите

CXXFLAGS        =  -pthread
  FEATURES        = DPC HDRI Cipher OpenMP
  DELEGATES       = bzlib fontconfig freetype jng jpeg lcms lzma openexr pango png ps rsvg tiff video webp x zlib
==============================================================================

Нет смысла продолжать

./configure --prefix=/путь --with-rsvg

Гугл подсказал, это поможет

И, да - помогло

$ /home/www/progs/bin/identify -version
Version: ImageMagick 7.0.10-59 Q16 x86_64 2021-01-16 https://imagemagick.org
Copyright: © 1999-2021 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI OpenMP(4.5)
Delegates (built-in): bzlib cairo fontconfig freetype jng jpeg lcms lzma openexr pangocairo png tiff webp x zlib

$ /home/www/progs/bin/identify /home/www_data/img/test/test_cmyk.jpg
/home/www_data/img/test/test_cmyk.jpg JPEG 1600x948 1600x948+0+0 8-bit CMYK 769432B 0.000u 0:00.000
SeVlad #:
А это откуда?
Там, возможно, могут быть проблемы с путями библиотек.

Как пример, кусок из  /usr/lib64/ImageMagick-6.9.10/config-Q16/configure.xml (Установленн глобально)

  <configure name="CFLAGS" value="-I/usr/include/libxml2    -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/uuid  

-I/usr/include/librsvg-2.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/gdk-pixbuf-2.0 -pthread -I/usr/include/libpng16 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/uuid  -I/usr/include/libraw  -I/usr/include/libpng16   -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/fribidi -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/uuid -I/usr/include/harfbuzz  -I/usr/include/OpenEXR -pthread -I/usr/include/libdrm  
-I/usr/include/openjpeg-2.3   -I/usr/include/graphviz  -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/harfbuzz -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/fribidi  -I/usr/include/freetype2 -I/usr/include/libpng16  -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/uuid     -fopenmp -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -DIMPNG_SETJMP_IS_THREAD_SAFE -fexceptions -pthread -DMAGICKCORE_HDRI_ENABLE=0 -DMAGICKCORE_QUANTUM_DEPTH=16"
/>

Существенно больше чем /home/www/progs/lib/ImageMagick-7.0.10/config-Q16HDRI/configure.xml (установлен локально, текущим юзером)

  <configure name="CFLAGS" value="
-I/usr/include/libpng16  
-I/usr/include/pango-1.0
-I/usr/include/glib-2.0
-I/usr/lib64/glib-2.0/include
-I/usr/include/fribidi
-I/usr/include/cairo
-I/usr/include/pixman-1
-I/usr/include/freetype2
-I/usr/include/libpng16
-I/usr/include/uuid
-I/usr/include/harfbuzz  
-I/usr/include/freetype2
-I/usr/include/libpng16  
-I/usr/include/freetype2
-I/usr/include/libpng16
-I/usr/include/uuid  

-fopenmp -Wall -g -O2 -mtune=core2 -fexceptions -pthread -DMAGICKCORE_HDRI_ENABLE=1 -DMAGICKCORE_QUANTUM_DEPTH=16"
/>

SeVlad #:
$ /path-to-install/convert  -version

пардон, в bin все лежит

$ /path-to-install/bin/convert  -version

Вашем случае, вероятно

$ ./bin/convert  -version

И правильней, "./"  добавлять перед командой, если пускаете из текущего каталога.  Чтобы не шарился по /usr/bin,  /usr/local/bin и т.д в поисках команды

Или проще, что у вас в --prefix было + bin

Всего: 541