分类 java技术 下的文章
SpringFramework
编程学习
关于Windows命令行窗口隐藏执行的解决办法
有时候在项目上需要通过bat脚本来启动一个服务,为了能够让这个脚本正常运行,避免人为操作关闭,需要让这个bat脚本在执行的时候隐藏掉,在后台运行。具体操作办法就是把下列内容拷贝到一个txt文件里面保存成后缀为bat的文件,
@echo off if "%1"=="h" goto begin start mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit :begin ----cmd指令,例如,运行d盘的tomcat d: cd d:/tomcat/bin/ startup.bat
然后,把这个脚本的快捷方式放到服务器的启动文件夹里面去,这样以后即使服务器重启了,也可以自动启动这个服务。
产品中mqtt服务的变迁史
由于公司的产品涉及到软件和硬件,同时,也用到了mqtt服务。我负责的这个产品从诞生到现在,mqtt服务也经历了好几次的更替。这个主要是从并发角度去考虑的。
1,Apache ActiveMQ,这个mqtt服务是我们最早使用的也是使用时间最长的一款mqtt服务软件,这个mqtt服务有很多有点,但是,它的缺点最终让我决定把它替换掉。那我就简单地列举一下缺点。最核心的缺点就是占用CPU比较高。举例说明,例如一个服务器的CPU是12个核,32G内存,当并发数量增加到2000以上的时候,CPU的使用率瞬间就会飙升到100%,也有可能会持续很长时间。占用这么高的CPU,最终就会导致整个系统无法正常使用。占用CPU过高最核心的问题就是Java这个虚拟机导致的,所以,这个没有办法从根本上解决问题。
2,mosquito,这个是c语言实现的一个轻量级的mqtt服务,相比于activemq它会减少很多的CPU资源,进而降低整个服务器的压力。总体来讲这个软件还是比较不错的。但是,最近一个项目上发现这个mosquito进程占用的CPU并不高,高峰期使用率只有14%左右,始终维持在2000左右的并发数量,项目现场的终端在3000台左右。每一台终端都会建立一个mqtt客户端连接。这样就会导致将近700台左右的设备无法正常连接服务器。没办法只能替换。最后终于找到原因了,这是因为网卡是百兆网卡,现场工程说是因为网线问题导致服务器的千兆网卡变成了百兆网卡。
3,emq,这个是erlang编程语言实现的一个mqtt服务,erlang编程语言的优势就是对并发的处理。可以这么说,erlang语言就是为并发而生。从这一点不能看出,到目前为止,emq是我使用过的所有mqtt服务性能最优的一款软件。尽管erlang也是以虚拟机的方式在运行,但是它占用的CPU资源要远比Java少的多,可以与mosquito相媲美。使用erlang既解决了并发问题,同时也解决了CPU使用率过高的问题。erlang编程语言里面的线程叫做协程,它可以用更少的资源来处理并发请求。