Depends. It can be handy to have different instances for "test" and "production" etc. Also helps reducing EJB JNDI namespace pollution if you want to deploy the same app to multiple instances.
How busy is each app? Even with a large machine with lots of memory, there is a point at which you cannot get any more throughput from an app server running in a single JVM. The issue is usually contention over shared resources (especially ones that have to be locked). In such situations having an app server instance for each app is preferrable. Of course if each app is not that busy, or the combined load is such that the app server is not pushed to its limits, then one app server is doable.
How concerned are you about data separation? Once an app is deployed into an app server, it has all of the resources of that app sevrer accessible to it. Thus anything in the global JNDI tree is eassily accessible - things such as EJB references and data sources. If you are confident that there is no "snooping" code in one app that lets it get at data from the other app, or that such data "sharing" is not an issue, then one app server is fine. If data privacy/separation must be strictly enforced, then two app server instances are better.
And on the reliability front - if one of the apps causes some kind of fault (let's say it has a memory leak and causes a OOME crash, or has an enless look at eats up a processor) is it acceptable for the other app's performance to be degraded, or the app to come down also? If not, then two app servers.
My investigation comes from the fact we currently have some large app servers in production (24Cores, 64GB RAM). They were purposed for our use but not what we would have chosen ourselves. We have never had an issue with OOME or CPU load (cause there are so many cores!), plus the amount of RAM is far more than we need. Personally I would have repurposed these machines for another use and replace them with smaller more suitable boxes with a single JBoss insance or virtualise them to get better use of the resources.
It would never have occurred to me to have mutliple instances of JBoss on a single box unless OOME was an issue and we did not want to go down the virtualiastion route.
I started working on 32-core systems with 64GB+ RAM about 10 years ago. At the time we ran multiple app servers, usually 1 app server for every 2 to 4 cores, with affinity set. And the affinity is the important part for two reasons: it limits the number of simultaneously running threads and thus prevents large-scale resource/lock contention, and it reduces the CPU cache thrashing. I even mentioned this in my presentation at the first JBossWorld.
Today, I would probably install a virtualization layer and run each app server in its own VM. Especiually since you mentioned that the box is underutilized. That would give you room to run additional workloads in other VMs without too much impact on the app servers.
Peter, this is really useful thanks!