tags:

views:

254

answers:

1

Hi all. I'm running my rails app in production mode and in staging mode on the same server, in different folders. They both use memcache-client which requires memcached to be running.

As yet i haven't set up a deploy script and so just do a deploy manually by sshing onto the server, going to the appropriate directory, updating the code, restarting memcached and then restarting unicorn (the processes which actually run the rails app). I restart memcached thus:

sudo /etc/init.d/memcached restart &

This starts a new memcached, but it doesn't kill the old one: check it out:

ip-<an-ip>:test.millionaire[subjects]$ ps afx | grep memcache
11176 pts/2    S+     0:00  |           \_ grep --color=auto memcache
10939 pts/3    R      8:13              \_ sudo /etc/init.d/memcached restart
 7453 ?        Sl     0:00 /usr/bin/memcached -m 64 -p 11211 -u nobody -l 127.0.0.1

ip-<an-ip>:test.millionaire[subjects]$ sudo /etc/init.d/memcached restart &
[1] 11187

ip-<an-ip>:test.millionaire[subjects]$ ps afx | grep memcache
11187 pts/2    T      0:00  |           \_ sudo /etc/init.d/memcached restart
11199 pts/2    S+     0:00  |           \_ grep --color=auto memcache
10939 pts/3    R      8:36              \_ sudo /etc/init.d/memcached restart
 7453 ?        Sl     0:00 /usr/bin/memcached -m 64 -p 11211 -u nobody -l 127.0.0.1

[1]+  Stopped                 sudo /etc/init.d/memcached restart
ip-<an-ip>:test.millionaire[subjects]$ sudo /etc/init.d/memcached restart &
[2] 11208
ip-<an-ip>:test.millionaire[subjects]$ ps afx | grep memcache
11187 pts/2    T      0:00  |           \_ sudo /etc/init.d/memcached restart
11208 pts/2    R      0:01  |           \_ sudo /etc/init.d/memcached restart
11218 pts/2    S+     0:00  |           \_ grep --color=auto memcache
10939 pts/3    R      8:42              \_ sudo /etc/init.d/memcached restart
 7453 ?        Sl     0:00 /usr/bin/memcached -m 64 -p 11211 -u nobody -l 127.0.0.1

What might be causing it is there's another memcached running - see the bottom line. I'm mystified as to where this is from and my instinct is to kill it but i thought i'dd better check with someone who actually knows more about memcached than i do.

Grateful for any advice - max

EDIT - solution

I figured this out after a bit of detective work with a colleague. In the rails console i typed CACHE.stats which prints out a hash of values, including "pid", which i could see was set to the instance of memcached which wasn;t started with memcached restart, ie this process:

7453 ?        Sl     0:00 /usr/bin/memcached -m 64 -p 11211 -u nobody -l 127.0.0.1

The memcached control script (ie that defines the start, stop and restart commands), is in /etc/init.d/memcached

A line in this says

# Edit /etc/default/memcached to change this.
ENABLE_MEMCACHED=no

So i looked in /etc/default/memcached, which was also set to ENABLE_MEMCACHED=no

So, this was basically preventing memcached from being stopped and started. I changed it to ENABLE_MEMCACHED=yes, then it would stop and start fine. Now when i stop and start memcached, it's the above process, the in-use memcached, that's stopped and started.

+1  A: 

try using:

 killall memcached
Greg
Thanks greg, i know how to kill processes but like i said i wanted to find out what was actually happening rather than just work around it. I figured it out anyway, see EDIT
Max Williams