Our experience is that there doesn't exist a good, correct, performant rack server for JRuby. We've used most of them, for two use cases: embedded status APIs in long running applications and as the primary interface for applications with a HTTP API.
We package our applications as standalone JAR files with JRuby and all gems, and run them with `java -jar ...`, and this rules our some of the options. Either because some servers just don't work when run that way because they assume they will be able to muck about with the file system any way they like, or because they need to be in control, they need to be the container of the application.
These are the servers we've tried, and our experience. If your use case is different, for example serving Rails apps, this may not be your experience:
* Fishwife is the only one we've found that doesn't have significant bugs and can be embedded. It's not perfect, but it works well for us.
* Mizuno is the precursor to Fishwife, and it hasn't been updated in years.
* Puma is nice and I'd really like to use it, but the error handling is buggy. It has often filled up disks with error messages. I think the worst of this has been fixed, but in our experience it doesn't handle connection errors very well. We stay well away from Puma.
* Jubilee showed some great promise but then development stopped. We haven't tried the last released version, but the last version we tried had significant bugs around request body handling.
* rack-jetty was abandoned several years ago and doesn't handle request bodies over 4 KiB.
* I'm not aware of any major bugs in Trinidad, but it doesn't work when embedded.
* Torquebox is also not embeddable, and version 4 is starting to feel like vaporware.
* WEBrick works surprisingly well for status APIs that don't get called very often.
As I said, our use case is very different from serving a Rails application, so your experience will probably be different.
T#