Category: Web Hosting

Back online yay!

FINALLY!

I lost all hope of waiting for the host of my dev box to get things in line and bring back my development VPS from it’s infinite downtime so I said “screw it” and moved this blog back under my “blog” server at WiredTree and got myself a new VPS from Linode.

Hurrah!

From the get go, I LOOOOOOOVE Linode. Awesome ticket response time, awesome server spec for your money and best of all, I got a VPS in Tokyo (response time yay). Checkout their plans here [Protip: that’s my referral link].

You can checkout the only project (for now at least) I have on my Linode VPS (Project Alter.. check it out here). Once I get things running smoothly (posting updates, not rolling out new code since that’s been optimized thanks to Capistrano), I’ll upload more projects onto it.

I am a bit miffed that they only support credit card payments as I have to manually deposit money onto my EON card to pay for it instead of simply getting paypal subscription to do it for me but hey, for the money I’m paying and the service I’m getting, it’s worth it. Yes, I could simply allow my EON card to draw funds from my Paypal account but I don’t like the extra charges.

In any case, I’m happy to get things back online. Now I need to go back to work on Project Alter 🙂

Installing XCache on a server with Cpanel

Traffic on my VPS jumped over the past few weeks and I needed a better caching solution so I installed W3 Total Cache. It provided you the option of caching pages, databases queries, features an object cache and even allows you to configure a CDN to serve your files. Trouble is, my server only had eaccelerator installed and it wasn’t compiled to use object-caching. Instead of upgrading recompiling eaccelerator, I opted to install XCache on my CPanel-enabled VPS.

Here’s a complete guide on installing Xcache on Cpanel.

First get the latest sources for XCache. As of publishing this guide, it’s 1.3.1

cd /usr/src/
wget http://xcache.lighttpd.net/pub/Releases/1.3.1/xcache-1.3.1.tar.gz

After which, unarchive the source and cd into the directory

tar -xzvf xcache-1.3.1.tar.gz
cd xcache-1.3.1

Time to configure the sources for the current PHP environment

[root@host xcache-1.3.1]# phpize
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519

Once you see the message above, XCache is ready to install.

./configure && make && make install

This will check for errors and run the installation script. Once complete, you should see this line:

Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20060613/

If like me, you have a different OPCode cache installed like eaccelerator, you need to comment any instances of these from your php.ini file. In my case it was

extension=eaccelerator.so
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

After that copy these into the php.ini. Note that these are the settings on my server. Tweak them as you need or please.

zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20060613/xcache.so"
[xcache.admin]
xcache.admin.auth = off
xcache.admin.enable_auth = off

; admin installation: http://xcache.lighttpd.net/wiki/InstallAdministration
xcache.admin.user = "admin username" ;if you're going to use this
xcache.admin.pass = "md5 hash of your password" ;change accordingly

[xcache]
xcache.shm_scheme = "mmap"
; to disable: xcache.size=0
; to enable : xcache.size=64M etc (any size > 0) and your system mmap allows
xcache.size = 128M
; set to cpu count (cat /proc/cpuinfo |grep -c processor)
xcache.count = 4
; just a hash hints, you can always store count(items) > slots
xcache.slots = 8K
; ttl of the cache item, 0=forever
xcache.ttl = 13300
xcache.cacher = On
; interval of gc scanning expired items, 0=no scan, other values is in seconds
xcache.gc_interval = 0

; same as aboves but for variable cache
xcache.var_size = 2M
xcache.var_count = 2
xcache.var_slots = 1K
; default ttl
xcache.var_ttl = 3600
xcache.var_maxttl = 7200
xcache.var_gc_interval = 300

xcache.test = Off
; N/A for /dev/zero
xcache.readonly_protection = Off
; for *nix, xcache.mmap_path is a file path, not directory.
; Use something like "/tmp/xcache" if you want to turn on ReadonlyProtection
; 2 group of php won't share the same /tmp/xcache
; for win32, xcache.mmap_path=anonymous map name, not file path
xcache.mmap_path = "/dev/zero"

; leave it blank(disabled) or "/tmp/phpcore/"
; make sure it's writable by php (without checking open_basedir)
xcache.coredump_directory = ""

; per request settings
xcache.cacher = On
xcache.stat = On
xcache.optimizer = Off

[xcache.coverager]
; per request settings
; enable coverage data collecting for xcache.coveragedump_directory and xcache_coverager_start/stop/get/clean() functions (will hurt executing performance)
xcache.coverager = Off

After editing your PHP ini, type:

 php -v

to check if things loaded properly. This is the output from my server:

[root@host xcache-1.3.1]# php -v
PHP 5.2.11 (cli) (built: Oct 27 2009 16:43:13) 
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
    with XCache v1.3.1, Copyright (c) 2005-2010, by mOo
    with the ionCube PHP Loader v3.3.20, Copyright (c) 2002-2010, by ionCube Ltd., and
    with Zend Extension Manager v1.2.2, Copyright (c) 2003-2007, by Zend Technologies
    with Zend Optimizer v3.3.3, Copyright (c) 1998-2007, by Zend Technologies

And you’re done. After which i simply set W3 Total Cache to use XCache for Database and Object Caching, flushed all existing caches and voila!

cPanel error: httpd failed – A restart was attempted automagically

While my recent server transfer has been smooth sailing, I did encounter one error that bugged the hell out of me.

At certain points of the day, I’d be receiving a notice that my VPS had it’s httpd process fail and restart automatically.  A copy of the email is posted below:

httpd failed @ Sun Apr 10 07:07:09 2011.. A restart was attempted automagically.
Service Check Method:  [tcp connect]

Failure Reason: Unable to connect to port 80

After a quick bout of google-fu I found our that the server is exceeding the allowed number of connections 🙁 Not good considering that the new server is quite powerful enough to handle more than it’s current peak traffic. Reading further into this, I had to execute this line:

grep MaxClients /usr/local/apache/logs/error_log

which then netted me this response:

WARNING: MaxClients of 512 exceeds ServerLimit value of 256 servers,
 lowering MaxClients to 256.  To increase, please see the ServerLimit
[Sat Apr 09 12:47:10 2011] [error] server reached MaxClients setting, consider raising the MaxClients setting

Soooo the problem is how apache is setup. The fix? Simply log in to cPanel and set the setting for MaxClients to something higher (in my case I doubled the number from 256 to 512) as well as he ServerLimit (to the same number). Of course if you want to do this manually, simply edit the MaxClients settings on apache’s httpd.conf file and restart the server.

Migrating my blogs to WiredTree

Because of several stability issues with my current VPS provider (not for this site), I decided to move forward and transfer to a new host.

By reputation, it was a choice between Servint, WiredTree and KnownHost. I chose WiredTree out of curiosity and I was pleased to find out that their sign up process was a breeze. I did have to wait for several hours for the phone-call to verify my order since I had placed it outside of their office hours but overall it’s been smooth sailing so far.

I’m mildly surprised by the server’s speed. It’s much more snappier than the old Core 2 server that I was hosted on. To top it off, Wired Tree also offers free DNS hosting, a feature that had me sticking to my old host. Now it’s just a matter of waiting for the DNS to propagate and check things out.

I’ll open a ticket to support just to be sure that I did everything right.