首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

jsvc 启动java 在linux上的实现原理

2012-12-15 
jsvc 启动java 在linux下的实现原理jsvc 是在apache的daemon项目下开源项目,主要功能可以使一些运行在普通

jsvc 启动java 在linux下的实现原理

jsvc 是在apache的daemon项目下开源项目,主要功能可以使一些运行在普通用户下的java进程获取一些root权限下的权利,比如端口在1024下等。


如何运行

在自己的java代码中,实现start, init , stop,destroy的方法,将自己的编译打成jar文件,  通过调用jsvc 来启动

static int get_legacy_caps(){        struct __user_cap_header_struct caphead;        struct __user_cap_data_struct   cap;        memset(&caphead, 0, sizeof caphead);        caphead.version = LEGACY_CAP_VERSION;        if (syscall(__NR_capget, &caphead, &cap) < 0)                log_error("capget failed: %m");        log_debug("PID is %d print the cap  0x%x, 0x%x, 0x%x\n", getpid(), cap.effective, cap.permitted, cap.inheritable);        return 0;}


启动java

通过调用JNI_CreateJavaVM 启动虚拟机器,同时调用包common-daemon里的DaemonLoader class, 调用你所写的类中的start,...这些方法。


碰到的问题

在jsvc 里在启动java以后就将jvm的虚拟机的进程的capability 设置成了0,  导致在虚拟机里的创建线程受到max process 的控制, ulimit -u 

已经创建issue: https://issues.apache.org/jira/browse/DAEMON-270, 短期解决办法可以设置ulimit 到比较大的值



热点排行