I recently started development work on an existing web site that has been loading pages extremely slowly. I know that it is being served by Apache, but I don't have any access to the server outside of the directory containing the site. I ran Google Page Speed and YSlow on the site, but there were only minor defects which have little impact on load times. Interestingly, I tried downloading a large file by FTP and then by HTTP; the FTP transfer rate was around 400 KB/s whereas the HTTP transfer was only 20 KB/s (I was on a reliable broadband connection). Does anyone have any idea what is going on here, or even better, how to solve it?

Saying that you're on a reliable broadband connection means almost nothing in terms of troubleshooting web site\application\network performance issues. Is there latency or packet loss between you and the server? Do the pages load slowly from multiple clients\networks? I know you said that you don't have access to the web server, but the first thing I would do (because I'm a network person and not a web person, therefore I don't know what web related tools to use) would be to put a packet capture program on the web server, start a capture and filter for http traffic, and access the site from a client machine. I would then look at the HTTP client requests and server responses in the capture. If there's a delay in the responses then it's a server problem (because you're running the capture directly on the server, the responses should be almost instantaneous), if there's no delay then it's a network problem.

Do you have SSH access to the apache server? If its runs on Linux, check if the resources on the box (CPU, memory) are over-utilized. The top command may be available on your host. Many web hosts have several sites running on the same machine, and one or more of them may be taxing the system. If you have access to netstat, you can also check the number of open apache threads to see if it is higher than usual. Apache is usually configured to run only so many concurrent threads at at time.

Running in a hosted environment should provide a Service Level Agreement of some sort. Have you pursued this issue through a support ticket? Have you considered a dedicated environment?