Saturday, May 25, 2013

GoDaddy's crippled NetApp filers

I just finished helping my friend Adam Aragon with an issue on his AntiPretty [NSFW-ish] alternative modeling site. It's a WordPress site running on GoDaddy. He was getting an error every time he tried to upload new images. Directory permissions were fine, as was all the PHP and WordPress stuff. GoDaddy support couldn't find a problem. So I logged in with SSH and tried to 'touch' a new file in the directory.

$ touch /path/wp-content/uploads/2013/05/testfile1
touch: cannot touch `/path/wp-content/uploads/2013/05/testfile1': File too large

Um, so an empty file is too large? This directory has 7508 files in it. That may sound like a lot, but it should be able to take millions of files. So I did a little digging. It turns out user content is NFS mounted from a NetApp filer running ONTAP 8.1.2. You can see the admin page for the filer at Is NetApp's admin interface secure enough to be publicly accessible? I know GoDaddy's shared hosting isn't secure. Oh, and GoDaddy's servers are running 32-bit CentOS 5 with a PAE kernel, and 24GB of RAM, on a 64-bit Intel Xeon L5609 processor. Is GoDaddy scared of 64-bit kernels?

NetApp has a setting called 'maxdirsize' which limits the number of KB of metadata and links a directory can have. The default is 1% of system RAM, on a filer with 32GB of RAM that would be 335544KB, or about 10 million files per directory. For some bizarre reason GoDaddy has set it to 600KB (seen with 'ls -lksd'), which in this case was 7508 files.

I submitted a ticket to GoDaddy and the response was:

After reviewing your issue, the maximum limit for uploads to our Linux shared accounts is 1028 files in any directory. Anything over this limit will decrease the speed of the server and can result in issues further down the road like you are seeing now.

Wow, just wow. You've crippled your filers on purpose.

Anyway, with the addition of a couple plugins the images are now being uploaded to and served from Amazon S3, and they are loading much quicker.

Ditch GoDaddy

I think most people know GoDaddy sucks. Whether it's their incredible slowness, their horrible user interface, their annoying up-selling, or their support of SOPA. There is nothing good about GoDaddy. But they are a well known domain registrar, and once people use them to register a domain they get stuck. So here are some alternatives.

Domain Name Registration

I like, I use them, EFF uses them. Their motto is "no bullshit", they don't try to up-sell you, private registration (hiding your contact details) is free, and they give you an SSL cert for free. When GoDaddy supported SOPA, donated $1 to EFF for every domain transfered from GoDaddy. A lot of people also like Namecheap, which also donated to EFF.


Most people seem to use their domain registrar for the name servers. Which is fine, but domain registrars don't specialize in DNS, and they can be slower than specialized Anycast DNS services. I'm a fan of DNS Made Easy, which is as low as $30/year for Anycast DNS. Another option is Dyn's DynECT service, which starts at $15/month. They are two of the top three fastest DNS providers, the other is CloudFlare, which is actually free.

Web Hosting

This is harder one, it really depends on what you are doing. I don't like PHP CMSs, as I've written about before. I think most of the sites I see out there should be static files, if your site only has a few pages, and they don't change often, your don't need a big fat CMS with a database. Static site generators like Jekyll and Middleman can easy the process of updating static sites. You can host static sites for practically free on S3, GitHub Pages, Google's App Engine or Cloud Storage, and others. For really simple sites you don't even need a static site generator, for example for my resume I used templates for the HTML and a YAML file for the data, and used Rake to compile the templates and push the results to S3. I put an example of my resume building code on GitHub. Twitter Bootstrap can also be a great help when designing sites.

For dynamic sites I think Platform as a Service (PaaS) clouds are a great way to go. Heroku, App Engine, and OpenShift are some examples of PaaS.

Take advantage of services that specialize in hosting a certain things. Such as Blogger, Tumblr, and for blogs.

If you insist on GoDaddy-style shared hosting, DreamHost is probably a better option.

And of course there is running your own servers, probably virtual cloud servers like Amazon EC2, Rackspace Cloud Servers, Google Compute Engine, Linode, and Digital Ocean. But I can't recommend running your own servers unless you have a dedicated sysadmin.