This contains some helpful hints and frequently asked questions about HHVM.
For a history of what is now HHVM, please visit our Wikipedia page.
Facebook's entire site runs on HHVM (desktop, API and mobile), both in development and production.
- Linux: HHVM has Linux support on flavors of Ubuntu and Debian.
- Mac OS X: HHVM has MacOS support via Homebrew.
New users may want to try our high-level overview getting started guide.
You can find more detailed installation information here.
Every week; each release is supported for 6 weeks.
This allows users to choose between many small updates, or fewer, larger updates.
The following sites use Hack and HHVM:
There is also a wiki listing HHVM users.
For real-time discussion, the team tends to hang out in #hhvm on IRC during working hours US Pacific time (and knowledgeable community members are often around at other times too).
Proxygen is strongly recommended, and used in production by Facebook.
FastCGI is not recommended, but available for legacy or niche use cases.
HHVM can be used either with
mod_proxy and the Proxygen server, or FastCGI.
Proxygen is recommended, but care is needed to forward headers appropriately.
The HHVM JIT needs time to warm up. The warmup usually occurs somewhere on the order of 10-11 requests, at which point the JIT has performed its optimizations and off we go at peak speed.
So, in HHVM server mode, you start out by running the first couple requests in interp mode to get things primed. You don't really want to be optimizing the first few requests since that is when initialization is occurring, caches are being loaded, etc. Those code paths are generally cold later on.
After the first few requests, the JIT is on its way to optimizing.
It is advisable, but not required, if you are running an HHVM server to send the server some explicit requests that are representative of what user requests will be coming through. You can use
curl, for example, to send these requests. This way the JIT has the information necessary to make the best optimizations for your code before any requests are actually served.