Quantcast
Channel: EasyEngine Community Forum - Latest posts
Viewing all articles
Browse latest Browse all 12639

Hhvm php.ini misconfiguration, broken sessions

$
0
0

Further update to this. I realised that even by changing sessions to .../php5 as above that it was still not clearing sessions via the cron.

I had to change sessions path to session.save_path = /var/lib/php/sessions in /etc/hhvm/php.ini :

; php options
session.save_handler = files
; session.save_path = /var/lib/hhvm/sessions
; session.save_path = /var/lib/php5/sessions
session.save_path = /var/lib/php/sessions
session.gc_probability = 0
session.gc_maxlifetime = 1440

; hhvm specific
hhvm.log.level = Warning
hhvm.log.always_log_unhandled_exceptions = true
hhvm.log.runtime_error_reporting_level = 8191
hhvm.mysql.typed_results = false

And then also manually edit the session clean script (/usr/lib/php5/sessionclean) as follows and hardcode the options:

#!/bin/sh -e

SAPIS="apache2:apache2\napache2filter:apache2\ncgi:php5\nfpm:php5-fpm\n"

# Iterate through all web SAPIs
(
proc_names=""
printf "$SAPIS" | \
while IFS=: read -r conf_dir proc_name; do
    if [ -e /etc/php5/cli/php.ini ]; then
        # Get all session variables once so we don't need to start PHP to get each config option
        session_config=$(/usr/bin/php -c /etc/php5/cli/php.ini -d "error_reporting='~E_ALL'" -r 'foreach(ini_get_all("session") as $k => $v) echo "$k=".$v["local_value"]."\n";')
        save_handler=files
        save_path=/var/lib/php/sessions
        gc_maxlifetime=1440
        if [ "$save_handler" = "files" -a -d "$save_path" ]; then
            proc_names="$proc_names $proc_name";
            printf "%s:%s\n" "$save_path" "$gc_maxlifetime"
        fi
    fi
done
# first find all open session files and touch them (hope it's not massive amount of files)
for pid in $(pidof $proc_names); do
    find "/proc/$pid/fd" -ignore_readdir_race -lname "$save_path/sess_\*" -exec touch -c {} \;
done
) | sort -rn -t: -k2,2 | sort -u -t: -k 1,1 | while IFS=: read -r save_path gc_maxlifetime; do
    # find all files older then maxlifetime and delete them
    find -O3 "$save_path" -depth -mindepth 1 -name 'sess_*' -ignore_readdir_race -type f -cmin "+$gc_maxlifetime" -delete
done

exit 0

After that, the cron is working properly and no more running out of inodes!


Viewing all articles
Browse latest Browse all 12639

Trending Articles