While it may not solve root cause of you issue, it might help with early termination of openHAB when first symptoms of failure occur.
Uncomment or add in config.properties following line:
karaf.systemd.enabled=true
and enable systemd watchog for jvm in openhab.service as described here: systemd for Administrators, Part XV (WatchdogSec=30s
In [Service] section).
This way restart of OH will be conducted when CPU gets too busy to react on time. You might even shorter watchog time to lower value.
The actual issue you see is definitely a memory issue. Usually when JVM gets in such situation it is so busy reclaiming memory (garbage collecting) that it does not process incoming signals at all. In order to heal issue you need to find root cause - it might be binding, custom rule (especially ones with timers and improper resource management). Most accurate way is - take a memory dump of running process, before it gets stuck, and browse it with tool such as jprofiler, yourkit, eclipse memory analyzer or jvisualvm. It should help you find something which occupy more memory than it should.