Yes there is a way since I have seen it.

The ZLOAD and ZREMOVE commands are combined. Here is a sample I was sent.

showAdmins() n rs1,rs2,rc1,rc2,$NAMESPACE,user,adminrole,roles
  s rs1=##class(%ResultSet).%New("Security.Roles:List")
  d rs1.Execute("*","%Admin_Manage:U,%Admin_Operate:U,%Admin_Secure:U")
  f  s rc1=rs1.Next() q:rc1=0  d
  . s adminrole=rs1.Data("Name")
  . s rs2=##class(%ResultSet).%New("Security.Users:List")
  . d rs2.Execute("*",adminrole)
  . f  s rc2=rs2.Next() q:rc2=0  w rs2.Data("Name"),"|",rs2.Data("Roles"),!
d showAdmins

The host, storage and DB engine don't influence the gref count at all. Only what the code does.
If you do a set,kill or write that is a gref.
The host, storage and DB engine determine the limit of grefs per second.
Faster storage is always better.
More memory (larger global/routine buffer) is always better.
Faster cores are always better. More cores are better if there is work for them to do.
Newer versions of IRIS (DB engine) are always better.

GLOSTAT will give you some numbers

Vertical Scaling IRIS

What does openssl version show? Guessing 3.x since that is the version that ships with Ubuntu 22.04.

Bob is right, try on Ubuntu 20.04 instead. This shows the downside of IRIS being dependent on OS packages.

I don't know a way that you can do that.

You can run  ^%GSIZE against a specific CACHE.DAT

I have 21 instances of Cache running on a single server.

There are a lot of pluses: simpler cpf, database snapshots, easier downtime negotiations

I would manually specify memory since you likely have very few simultaneous users.

Here is a link Sizing System Memory for Caché

If your session is text you might make a look at a tool like screen that is available for Unix based systems.