在同一台机器上,如果jvm设置的内存过大,就会导致其它程序所占用的内存小。比如elasticsearch、kafka,虽然它们都是基于jvm运行的程序(java和scala都是依赖于jvm),但是它们的数据不是放到jvm内存中,而是放到os cache中(操作系统管理的内存区域),避免了jvm垃圾回收的影响(jvm垃圾回收时会停止目前的工作进程)。原理图如下:
如果在同一台机器上同时用了elasticsearch,而jvm分配内存过大,导致os cache的内存小,加载的数据量小,那么elasticsearch搜索的时候无法从os cache中获得数据,进而向磁盘中读取数据,影响了查询效率。