кто тормозит железо - постгресс или скрипт

Alexandre

PHPПенсионер
кто тормозит железо - постгресс или скрипт

двухпроцессорний ксеон 2Гг памяти сильно тормозит.
пытаюсь разобраться и найти причину.

распечатка производительности

что в ней может показаться странного специалисту??
Код:
last pid: 83391;  load averages: 51.13, 46.35, 36.28                                    up 44+05:41:31  15:26:24
447 processes: 94 running, 353 sleeping
CPU states: 23.9% user,  0.0% nice, 73.0% system,  0.5% interrupt,  2.6% idle
Mem: 864M Active, 585M Inact, 465M Wired, 68M Cache, 199M Buf, 29M Free
Swap: 4097M Total, 236K Used, 4097M Free

  PID USERNAME      PRI NICE  SIZE    RES STATE  C   TIME   WCPU    CPU COMMAND
  619 pgsql           2   0   277M   263M select 1  26.9H  6.30%  6.30% postgre
78132 www             2   0 21824K 11636K poll   1   0:08  6.01%  6.01% httpd
82632 pgsql          64   0   283M 64776K RUN    1   0:03  2.44%  2.39% postgre
80689 pgsql          64   0   283M 80804K RUN    1   0:16  2.00%  2.00% postgre
82899 pgsql          64   0   279M 31208K RUN    1   0:01  2.11%  1.95% postgre
  148 pgsql           2   0   276M  2900K select 0 722:01  1.86%  1.86% postgre
82946 pgsql          63   0   281M 28484K RUN    1   0:01  1.72%  1.56% postgre
82556 pgsql          63   0   280M 81200K RUN    1   0:02  1.39%  1.37% postgre
82916 pgsql          63   0   280M 27520K RUN    0   0:01  1.48%  1.37% postgre
82654 pgsql          62   0   280M 74228K RUN    3   0:02  1.35%  1.32% postgre
83019 pgsql          63   0   280M 23800K RUN    1   0:01  1.51%  1.32% postgre
83074 pgsql          63   0   280M 26472K RUN    0   0:01  1.46%  1.22% postgre
83196 pgsql          64   0   278M 21448K RUN    1   0:01  1.76%  1.17% postgre
83334 pgsql          64   0   277M 14408K RUN    1   0:00  3.96%  1.17% postgre
82696 pgsql          62   0   280M 72288K RUN    1   0:02  1.10%  1.07% postgre
82958 pgsql          62   0   280M 27968K RUN    1   0:01  1.19%  1.07% postgre
83066 pgsql          -6   0   280M 29136K biord  2   0:01  1.27%  1.07% postgre
83078 pgsql          62   0   279M 33804K RUN    1   0:01  1.29%  1.07% postgre
83141 pgsql          63   0   278M 23756K RUN    3   0:01  1.40%  1.07% postgre
83203 pgsql          64   0   278M 18276K RUN    1   0:00  1.65%  1.07% postgre
82517 pgsql          62   0   280M 76788K RUN    0   0:02  1.04%  1.03% postgre
83030 pgsql          62   0   280M 24940K RUN    3   0:01  1.19%  1.03% postgre
83149 pgsql          63   0   278M 21512K RUN    1   0:01  1.34%  1.03% postgre
83167 pgsql          64   0   278M 21680K RUN    1   0:01  1.41%  1.03% postgre
83310 pgsql          64   0   278M 16088K RUN    3   0:00  2.60%  1.03% postgre
82446 www             2   0 20872K 10660K accept 1   0:01  0.93%  0.93% httpd
83148 pgsql          63   0   278M 23440K RUN    1   0:01  1.21%  0.93% postgre
82435 www             2   0 21896K 11688K poll   1   0:01  0.89%  0.88% httpd
83045 pgsql          62   0   280M 20180K RUN    1   0:01  1.02%  0.88% postgre
83183 pgsql          63   0   278M 20380K RUN    0   0:01  1.26%  0.88% postgre
83224 pgsql          64   0   278M 18820K RUN    0   0:00  1.39%  0.88% postgre
82415 www             2   0 20448K 10184K poll   1   0:01  0.84%  0.83% httpd
83070 pgsql          62   0   278M 32952K RUN    2   0:01  0.99%  0.83% postgre
70193 www             2   0 22556K 12284K poll   2   0:12  0.78%  0.78% httpd
82989 www             2   0 20784K 10568K poll   3   0:00  0.82%  0.73% httpd
83266 pgsql          -6   0   278M 17236K biord  2   0:00  1.36%  0.68% postgre
83297 pgsql          63   0   277M 17936K RUN    1   0:00  1.61%  0.68% postgre
83110 pgsql          62   0   278M 22292K RUN    1   0:01  0.79%  0.63% postgre
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
ну с таким load average ничего быстро работать не будет...

откуда столько процессов? там реально такое количество подключений?

почему память свободная есть? какого размера база? что за задача?
 

Alexandre

PHPПенсионер
Sad Spirit
сам пытаюсь разобраться,
это мне наследство такое досталось....

Суть задачи в следующем
есть несколько однотипных сайтов (пять), с одним ядром.
на каждый сайт своя база. размер базы 250 - 500 М

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

активных должно быть пять - семь.

Еще сегодня выскочил один момент, постгресс (не крон точно) запускает самосохранение (pg_dump ) в 12 дня, во время пиковой нагрузки. и это сохранение идет до самого вечера... Из-за этого сервак ложится напрочь
bsd# ps -allx|grep dump
70 40057 77621 105 18 0 1168 756 pause S ?? 0:00,01 -su -c pg_dump -b -F c -f /home/pgsql/backups/pgdump_storewars_2005-10
70 40058 40057 109 2 0 4832 2064 poll S ?? 0:00,04 pg_dump -b -F c -f /home/pgsql/backups/pgdump_storewars_2005-10-28T15:

как я выяснил, бэкап прописан в файле periodic.conf или 502.pgsql
я не знаю кто кого запускает... как это отключить???
как настроить например на 3 ночи (если это запускает не крон)
Ось FreeBsd

-~{}~ 28.10.05 18:31:

после того как отработал бэкап

Код:
last pid: 60018;  load averages: 15.79, 14.82, 20.73                                                             up 44+08:59:07  18:44:00
369 processes: 15 running, 353 sleeping, 1 stopped
CPU states: 15.0% user,  0.0% nice, 47.9% system,  0.1% interrupt, 37.1% idle
Mem: 673M Active, 757M Inact, 471M Wired, 106M Cache, 199M Buf, 4560K Free
Swap: 4097M Total, 196K Used, 4097M Free

  PID USERNAME      PRI NICE  SIZE    RES STATE  C   TIME   WCPU    CPU COMMAND
  619 pgsql           2   0   277M   223M select 1  27.1H  4.10%  4.10% postgre
59887 pgsql          -4   0   280M 22224K semwai 0   0:01  3.15%  1.81% postgre
59657 pgsql          -4   0   309M   121M semwai 1   0:02  1.75%  1.61% postgre
59888 pgsql          -4   0   278M 50308K semwai 0   0:01  2.47%  1.42% postgre
59898 pgsql          -4   0   278M 18748K semwai 2   0:00  2.71%  1.37% postgre
59706 pgsql          -4   0   280M 58480K semwai 0   0:01  1.32%  1.17% postgre
59891 pgsql          -4   0   278M 33216K semwai 2   0:00  2.13%  1.17% postgre
59901 pgsql          -4   0   278M 20740K semwai 2   0:00  2.33%  1.17% postgre
59911 pgsql          -4   0   278M 22124K semwai 2   0:00  2.04%  0.98% postgre
59916 pgsql          -4   0   278M 18812K semwai 2   0:00  2.16%  0.98% postgre
59912 pgsql          -4   0   278M 16884K semwai 2   0:00  1.94%  0.93% postgre
46944 www             2   0 21548K  8056K sbwait 0   0:10  0.88%  0.88% httpd
59913 pgsql          -4   0   278M 22764K semwai 2   0:00  1.84%  0.88% postgre
59899 pgsql          -4   0   278M 21588K semwai 2   0:00  1.74%  0.88% postgre
59924 pgsql          -4   0   278M 18216K semwai 2   0:00  2.08%  0.88% postgre
59925 pgsql          -4   0   278M 18568K semwai 2   0:00  1.85%  0.78% postgre
59923 pgsql          -4   0   278M 19896K semwai 2   0:00  1.51%  0.68% postgre
59943 pgsql          -4   0   277M 13644K semwai 0   0:00  1.88%  0.68% postgre
59926 pgsql          -4   0   278M 21468K semwai 2   0:00  1.50%  0.63% postgre
60007 www             2   0 21464K  7652K select 2   0:00  6.66%  0.63% httpd
59942 pgsql          -4   0   277M 13456K semwai 2   0:00  1.48%  0.54% postgre
59856 www             2   0 20864K  6804K poll   1   0:00  0.60%  0.39% httpd
60000 www             2   0 20360K  6240K poll   2   0:00  4.10%  0.39% httpd
47413 www             2   0 22256K  8864K sbwait 1   0:10  0.34%  0.34% httpd
59378 www             2   0 21052K  7216K poll   0   0:00  0.35%  0.34% httpd
59953 pgsql          58   0   277M 12232K CPU0   0   0:00  1.16%  0.34% postgre
59979 pgsql          -4   0   277M  9292K semwai 2   0:00  1.88%  0.34% postgre
46440 www             2   0 21100K  7768K poll   0   0:11  0.29%  0.29% httpd
59940 pgsql          -4   0   277M 15804K semwai 2   0:00  0.81%  0.29% postgre
60003 www             2   0 20364K  6252K poll   1   0:00  3.08%  0.29% httpd
37952 www             2   0 21644K  7964K poll   3   0:16  0.24%  0.24% httpd
58693 www             2   0 21344K  7424K poll   3   0:01  0.24%  0.24% httpd
59032 www             2   0 22204K  8576K sbwait 1   0:01  0.24%  0.24% httpd
59947 pgsql          -4   0   278M 18116K semwai 2   0:00  0.74%  0.24% postgre
59956 pgsql          -4   0   277M 12616K semwai 0   0:00  0.83%  0.24% postgre
59988 www             2   0 20364K  6104K poll   2   0:00  1.75%  0.24% httpd
59985 www             2   0 20360K  6104K poll   3   0:00  1.75%  0.24% httpd
60001 www             2   0 20364K  6104K poll   2   0:00  2.56%  0.24% httpd
59990 pgsql          -4   0   277M  9208K semwai 2   0:00  1.75%  0.24% postgre
59850 www             2   0 20452K  6484K sbwait 2   0:00  0.29%  0.20% httpd
59954 pgsql          -4   0   277M 13444K semwai 2   0:00  0.66%  0.20% postgre
59949 pgsql          -4   0   277M 13980K semwai 2   0:00  0.59%  0.20% postgre
59993 pgsql          -4   0   277M  9168K semwai 2   0:00  1.40%  0.20% postgre
 

si

Administrator
LA очень большой. для начала в httpd вырубить keepalive и pconnect к pg в PHP
 

Steamroller

Новичок
semwai - это судя по названию же semaphore wait, тогда это нездорово очень, типа deadlocking, базу лечить надо.
 

si

Administrator
Alexandre
pconnect или/и висящие в keepalive процессы апача
 

Alexandre

PHPПенсионер
коннекшен как pg_connect()

-~{}~ 28.10.05 19:15:

вырубить keepalive
вырубил - не помогло

-~{}~ 28.10.05 19:26:

хотя картина изменилась к лучшему (точно не знаю)
Код:
last pid: 86079;  load averages:  4.43,  7.45, 11.17                                                             up 44+09:54:06  19:38:59
235 processes: 4 running, 230 sleeping, 1 stopped
CPU states: 36.4% user,  0.0% nice, 22.5% system,  0.1% interrupt, 41.0% idle
Mem: 447M Active, 1007M Inact, 458M Wired, 79M Cache, 199M Buf, 19M Free
Swap: 4097M Total, 180K Used, 4097M Free

  PID USERNAME      PRI NICE  SIZE    RES STATE  C   TIME   WCPU    CPU COMMAND
85994 pgsql          -4   0   283M 73604K semwai 0   0:12 80.53% 40.58% postgre
  619 pgsql           2   0   277M   246M select 1  27.1H  2.39%  2.39% postgre
59657 pgsql          -2   0   309M   279M getblk 1   2:28  1.66%  1.66% postgre
83918 www             2   0 21900K 12252K sbwait 0   0:04  1.37%  1.37% httpd
83897 www             2   0 20984K 11464K poll   2   0:03  1.32%  1.32% httpd
86069 pgsql          -4   0   281M 73712K semwai 0   0:01 27.00%  1.32% postgre
83878 www             2   0 21772K 12144K accept 0   0:03  1.27%  1.27% httpd
83898 www             2   0 21256K 11736K select 0   0:04  1.17%  1.17% httpd
83900 www             2   0 21200K 11672K accept 0   0:04  1.07%  1.07% httpd
83877 www             2   0 21076K 11556K accept 0   0:04  1.03%  1.03% httpd
83902 www             2   0 21568K 12052K sbwait 3   0:03  1.03%  1.03% httpd
83834 www             2   0 21464K 11964K sbwait 1   0:04  0.98%  0.98% httpd
83917 www             2   0 22008K 12372K poll   2   0:04  0.98%  0.98% httpd
86053 pgsql          -6   0   280M 30316K biord  0   0:00  7.00%  0.98% postgre
83833 www             2   0 21624K 12024K select 2   0:04  0.93%  0.93% httpd
83899 www             2   0 21704K 12176K poll   0   0:03  0.93%  0.93% httpd
83888 www             2   0 21752K 12112K accept 0   0:03  0.93%  0.93% httpd
86065 pgsql           2   0   279M 25560K sbwait 2   0:00  9.74%  0.93% postgre
83927 www             2   0 21696K 11892K poll   0   0:03  0.88%  0.88% httpd
83907 www             2   0 21520K 12000K select 2   0:03  0.83%  0.83% httpd
83887 www             2   0 21208K 11688K sbwait 1   0:03  0.83%  0.83% httpd
83842 www             2   0 21372K 11768K select 2   0:04  0.78%  0.78% httpd
83901 www             2   0 21296K 11668K select 2   0:03  0.68%  0.68% httpd
83835 www             2   0 22032K 12424K accept 0   0:03  0.68%  0.68% httpd
83886 www             2   0 21324K 11696K poll   0   0:02  0.63%  0.63% httpd
83885 www            -2   0 21324K 11684K getblk 0   0:03  0.59%  0.59% httpd
86060 pgsql           2   0   278M 17632K sbwait 0   0:00  3.15%  0.44% postgre
86063 pgsql           2   0   277M 11004K sbwait 0   0:00  1.03%  0.10% postgre
83841 www             2   0 21340K 11832K poll   2   0:03  0.05%  0.05% httpd
83903 www             2   0 21628K 11992K poll   2   0:03  0.05%  0.05% httpd
86062 www             2   0 20432K 10820K accept 0   0:00  0.51%  0.05% httpd
  148 pgsql           2   0   276M   668K select 3 724:49  0.00%  0.00% postgre
  621 pgsql          -2   0  7840K  1060K getblk 1 161:26  0.00%  0.00% postgre
  620 pgsql           2   0  8356K  1292K select 1 131:58  0.00%  0.00% postgre
  268 root            2   0 19252K  9592K select 3  68:21  0.00%  0.00% httpd
  406 mysql           2   0   317M  7752K poll   1  49:14  0.00%  0.00% mysqld
  368 qmails          2   0  1272K   452K select 2  22:13  0.00%  0.00% qmail-s
  155 pgsql           2   0  7352K   316K select 3   7:36  0.00%  0.00% postgre
  370 root           -6   0   892K   228K piperd 0   3:50  0.00%  0.00% fraclog
  388 qmaill         -6   0   868K    84K piperd 3   3:26  0.00%  0.00% tai64n
  390 qmailr          2   0   988K   340K select 3   2:40  0.00%  0.00% qmail-r
  389 root            2   0   896K   236K select 1   2:05  0.00%  0.00% qmail-l
  106 root            2   0  2600K   312K select 0   2:01  0.00%  0.00% sshd
-~{}~ 28.10.05 19:27:

возможно что снизилась вечерняя нагрузка
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Я в БЗДе не разбираюсь, потому только на симптомы могу внимание обратить.

pg_dump есессно надо пускать ночью. В самом Постгресе средств планировщика задач нету, значит запускается по cron'у. Тем не менее, pg_dump для такого объёма в нормальных услових отработает практически мгновенно.

Объём данных весьма маленький, большая часть может осесть в памяти, совершенно непонятно, почему здоровый шмат памяти остаётся свободным.

semwait, на который тут уже обращали внимание, может указывать на какие-то косяки в работе с разделяемой памятью.

Вот кстати народ в pgsql-performance на то же самое жалуется, может найдёшь что полезное.

Да, версия Постгреса-то какая?
 

Steamroller

Новичок
inact - это не свободная память.
free - это свободная, и она на freebsd обычно колеблется от нуля до нескольких десятков мегов (так как процессы умирают).
Так что тут память полностью используется.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Steamroller
inact - это не свободная память.
free - это свободная, и она на freebsd обычно колеблется от нуля до нескольких десятков мегов (так как процессы умирают).
Так что тут память полностью используется.
Спасибо за проправку. Тогда этот вопрос снят, остаётся вопрос по поводу возможных косяков при работе с разделяемой памятью.

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

Alexandre

PHPПенсионер
Код:
last pid: 34791;  load averages: 51.95, 36.67, 32.12                                                              up 47+03:03:30  11:48:23
535 processes: 10 running, 525 sleeping
CPU states: 11.8% user,  0.0% nice, 52.8% system,  0.3% interrupt, 35.2% idle
Mem: 917M Active, 594M Inact, 398M Wired, 98M Cache, 199M Buf, 3060K Free
Swap: 4097M Total, 220K Used, 4097M Free

  PID USERNAME      PRI NICE  SIZE    RES STATE  C   TIME   WCPU    CPU COMMAND
34743 moscowout      62   0  2536K  1728K CPU0   0   0:02 52.74%  9.57% top
91513 root           -6   0  9260K  8884K biord  3  16:22  6.20%  6.20% find
28238 pgsql          -4   0   283M 79448K semwai 1   0:31  3.03%  3.03% postgre
34348 pgsql          -4   0   283M 81992K semwai 1   0:02  2.83%  2.69% postgre
  619 pgsql           2   0   277M   261M select 0  28.4H  2.39%  2.39% postgre
34422 pgsql          -4   0   282M 22660K semwai 1   0:01  2.04%  1.86% postgre
34448 pgsql          58   0   281M 31456K RUN    1   0:01  2.03%  1.81% postgre
34487 pgsql          -4   0   281M 28352K semwai 1   0:01  1.49%  1.27% postgre
34521 pgsql          -4   0   279M 22196K semwai 2   0:01  1.16%  0.93% postgre
34527 pgsql          -4   0   280M 23492K semwai 1   0:01  1.16%  0.93% postgre
34519 pgsql          -4   0   280M 23516K semwai 3   0:01  1.10%  0.88% postgre
34504 pgsql           2   0   278M 22880K sbwait 3   0:01  0.88%  0.73% postgre
34636 www             2   0 21480K 11644K poll   3   0:00  1.15%  0.63% httpd
33192 www             2   0 21528K 11752K poll   0   0:01  0.59%  0.59% httpd
34289 www             2   0 21016K 11220K poll   3   0:00  0.61%  0.59% httpd
34558 pgsql          -4   0   278M 22016K semwai 1   0:00  0.79%  0.59% postgre
34564 pgsql          -4   0   278M 16424K semwai 3   0:00  0.62%  0.44% postgre
33798 www             2   0 20832K 10996K poll   2   0:01  0.39%  0.39% httpd
34544 www             2   0 20412K 10596K poll   2   0:00  0.50%  0.39% httpd
32813 www             2   0 21864K 12104K poll   0   0:02  0.29%  0.29% httpd
34097 www             2   0 20716K 10888K poll   1   0:00  0.30%  0.29% httpd
34576 pgsql          -4   0   278M 15892K semwai 1   0:00  0.43%  0.29% postgre
26010 www             2   0 21200K 11432K poll   0   0:07  0.24%  0.24% httpd
26174 www             2   0 21104K 11220K poll   0   0:06  0.24%  0.24% httpd
26417 www             2   0 22044K 12156K poll   1   0:06  0.24%  0.24% httpd
31982 www             2   0 21924K 12136K poll   1   0:02  0.24%  0.24% httpd
33290 www             2   0 21404K 11640K select 0   0:01  0.24%  0.24% httpd
33303 www             2   0 21444K 11676K poll   1   0:01  0.24%  0.24% httpd
  621 pgsql           2   0  7840K  1060K select 1 170:15  0.20%  0.20% postgre
32496 www             2   0 21164K 11380K poll   3   0:02  0.20%  0.20% httpd
32471 www             2   0 21364K 11592K poll   2   0:02  0.20%  0.20% httpd
34601 pgsql          -4   0   277M 13476K semwai 1   0:00  0.31%  0.20% postgre
34582 pgsql          -4   0   278M 15776K semwai 1   0:00  0.29%  0.20% postgre
26162 www             2   0 21188K 11416K poll   1   0:07  0.15%  0.15% httpd
26446 www             2   0 21996K 12160K poll   1   0:06  0.15%  0.15% httpd
29386 www             2   0 21360K 11588K accept 1   0:04  0.15%  0.15% httpd
26165 www             2   0 20960K 11168K poll   1   0:03  0.15%  0.15% httpd
34191 www             2   0 20664K 10844K poll   0   0:00  0.15%  0.15% httpd
34189 www             2   0 20824K 11032K poll   1   0:00  0.15%  0.15% httpd
34197 www             2   0 20892K 11076K poll   3   0:00  0.15%  0.15% httpd
34275 www             2   0 20988K 11196K poll   0   0:00  0.15%  0.15% httpd
34603 pgsql          -4   0   277M 13744K semwai 1   0:00  0.24%  0.15% postgre
-~{}~ 31.10.05 11:35:

еще не вечер,
посмотрю после 12 часов, когда нагрузка созрастет
 

si

Administrator
я тут насчитал почти 25 апачей, это не мало как бы

вариантов тут несколько:

1. тормозит pg (по какой причине не скажу) отчего апаче очень долго получает от него ответ
2. остался включенным keepalive
3. много медленных клиентов, которые медленно забираю ответ у апача.

проблема 2 и 3 решается установкой перед апачем nginx
 

Alexandre

PHPПенсионер
проблема 2 и 3 решается установкой перед апачем nginx
можно поподробнее, перед апачем или вместо??
и как понять перед -(

-~{}~ 31.10.05 12:44:

2. остался включенным keepalive
Как он может остаться включенным, если я сделал keepalive Off
как проверить Onn or Off?
 

si

Administrator
Alexandre
перед это перед,
схема получится такая:
client <-> nginx <-> apache+php <-> db

если пойти дальше то статику можно прямо отдавать при помощи nginx
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Я бы предложил поспрашивать в списке рассылки pgsql-performance и где-нибудь, где тусуются гуру FreeBSD. Похоже на какую-то несовместимость (вот етот вот semwait наводит на мысли)...

Можно ещё попробовать на тестовом сервере погонять 8.1, он всё равно скоро уже выйдет.
 

Screjet

Новичок
dump нужно запускать через nice,
проверь, чтобы кеширование вывода в ПХП было

..и проверь индексы в ПГ, если есть кеширование SQL, проверь чтобы было включено.

-~{}~ 31.10.05 14:29:

73.0% system
Выясни что куда расходуется, поиграйся с vmstat
 
Сверху