[Bug 1356113] Re: PHP5 session clean cron job causes OOM
Steve Kamerman
1356113 at bugs.launchpad.net
Sat Aug 16 00:59:04 UTC 2014
What do you think about running this for each SAPI? It's actually *way*
more efficient:
for pid in $(pidof "$sapi"); do
find "/proc/$pid/fd" -lname "$session_save_path/*" -exec touch {} \;
done
That will iterate all the PIDs of the running SAPI (we'll need to
iterate them as well), then find all the files it has open and touch
them.
This is more efficient than lsof since it looks only at the files open
by the SAPI in question, instead of every process. As an example,
here's the timing of my proposed way and the current way:
kamermans at steve-ubuntu:~$ time for pid in $(pidof apache2); do sudo find "/proc/$pid/fd" -lname "/var/lib/php5/*" -print -exec touch {} \; ; done
/proc/4202/fd/21
real 0m0.143s
user 0m0.069s
sys 0m0.077s
kamermans at steve-ubuntu:~$ time sudo /usr/bin/lsof -w -l +d /var/lib/php5
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
apache2 4202 33 21uW REG 8,3 0 277620 /var/lib/php5/sess_bbn8sh6ljim484c4qt3inubhr3
real 0m1.079s
user 0m0.514s
sys 0m0.845s
Notice that my version returns /proc/4202/fd/21, but that is the file descriptor which is a symbolic link to /var/lib/php5/sess_bbn8sh6ljim484c4qt3inubhr3. Touching the link touches the file, so the effect is the same. Also, since the find command finds and touches the file in (almost) one operation, so it's unlikely the file will disappear between the time that it's found and the time that it's touched.
Yet another option is to alter the lsof call to restrict it to just
processes that match the given name(s). This is also fast, although it
not quite as fast as the aforementioned /proc method in my test:
kamermans at steve-ubuntu:~$ time sudo /usr/bin/lsof -w -l -a +d /var/lib/php5 -c apache2
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
apache2 4202 33 21uW REG 8,3 0 266585 /var/lib/php5/sess_18and1t1ej6frr9kjai3m1dbj4
real 0m0.182s
user 0m0.074s
sys 0m0.091s
Note that I added "-a" to AND the directory and command constraint,
otherwise they would be OR'd.
--
You received this bug notification because you are a member of Ubuntu
Server Team, which is subscribed to php5 in Ubuntu.
https://bugs.launchpad.net/bugs/1356113
Title:
PHP5 session clean cron job causes OOM
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1356113/+subscriptions
More information about the Ubuntu-server-bugs
mailing list