如何防止 JNA 方法调用超出 CPU 利用率、线程数和内存限制的阈值?
背景:
我正在开发一个安全关键应用程序,其中一个非安全关键功能需要使用用 C 编写的库。这些 dll 已作为黑盒提供给我,我不可能得到访问 java 接口文件之外的源代码。有没有办法限制 JNA 代码使用的 CPU 使用率、线程数和内存?
如何防止 JNA 方法调用超出 CPU 利用率、线程数和内存限制的阈值?
背景:
我正在开发一个安全关键应用程序,其中一个非安全关键功能需要使用用 C 编写的库。这些 dll 已作为黑盒提供给我,我不可能得到访问 java 接口文件之外的源代码。有没有办法限制 JNA 代码使用的 CPU 使用率、线程数和内存?
对于大多数操作系统,您必须从新线程或新进程调用您的 C 代码。我建议从一个新进程中调用它,因为这样您就可以更轻松、更深入地对其进行沙箱处理。通常在类似 Unix 的系统上,切换到为服务预留的新用户,并且对其有用户资源限制。但是,在 Linux 上,可以使用用户命名空间和 cgroups 来实现更动态和灵活的沙盒。在 Microsoft Windows 上,通常使用 Job 对象进行资源沙箱化,但基于权限的沙箱化更加复杂(许多 Windows 很容易通过访问控制进行沙箱化,但 GUI 和窗口消息传递部分使事情变得复杂和烦人)。
请参阅ulimit
和sysctl
,它们适用于您的整个 JVM 进程(或任何其他进程,就此而言)。
但是,将通过 JNA 进行本机访问的 JVM 部分与没有进行本机访问的部分区分开来并不容易。
您应该在锻炼共享库时运行一些分析以找出它确实使用了哪些资源,这样您就可以专注于围绕这些设置限制(lsof
或者strace
将在 linux 上使用,我不确定 Windows 上的等价物)。