У меня есть большая задача php cron, которая запускается каждые 20 минут. После каждого выполнения объем оперативной памяти, используемой виртуальным сервером, увеличивается и не освобождается должным образом после завершения сценария!
Но почему? Память не кешируется
total used free shared buffers cached
Mem: 2048 1948 99 0 0 88
-/+ buffers/cache: 1859 188
Swap: 0 0 0
Скрипт создает curl / multi_curl и обновляет базу данных Mysql.
Есть ли способ отладить сценарий, видя все переменные и использование памяти с течением времени? или просто те, которые не были выпущены в конце ...
Память должна быть освобождена при выходе из программы (независимо от того, освободила она ее или нет). Например.
[kbrandt@ny-kbrandt01: ~] cat eat_mem.c
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main()
{
#1 GByte
const int m = 1024*1024*1024;
#Allocate a gig
void *p = (int*)malloc(m);
#Write a Gigs worth of zeros to that gig
memset(p,0,m);
sleep(10);
#In theory I should free(p) here (heh... heh... I said "free p", get it?)
return 0;
}
[kbrandt@ny-kbrandt01: ~] gcc eat_mem.c; ./a.out &; sleep 1; free -m;sleep 10; free -m
[1] 10666
total used free shared buffers cached
Mem: 7872 1848 6023 0 143 431
-/+ buffers/cache: 1273 6599
Swap: 30467 0 30467
[1] + done ./a.out
total used free shared buffers cached
Mem: 7872 823 7049 0 143 431
-/+ buffers/cache: 247 7624
Swap: 30467 0 30467
Итак, если ваш скрипт запускается при выходе из задания cron, это не будет проблемой. Значит, вам нужно посмотреть, какая программа растет в памяти. Вы можете просто посмотреть это, используя top
(Вы можете отсортировать по размеру резидентной памяти, нажав F
(заглавная), а затем q
для RES вверху) и посмотрим, какая программа растет.
Я предполагаю, что это будет MySQL, потому что что бы ни делал ваш скрипт, он делает что-то в SQL, а SQL в конечном итоге использует больше памяти. Это, вероятно, на самом деле не проблема, если я должен был догадаться, MySQL будет использовать память, которую он может получить, и использовать ее с умом большую часть времени.