最近对组成成员进行了一次简单的版本管理与版本控制的分享,其实这些东西都是开发中必不可少的,只是以前的工作重点并没有放在这个方面.废话少说,我们先了解下什么是版本管理与版本控制.
版本管理
版本管理表示对项目整体版本的演变过程管理,最简单的如v1.0变更至v1.1,从snapshot变更至release.
一般情况下版本发布应该具备以下条件:
- 配置项没有任何其它版本依赖
- 所有的代码已经提交版本控制系统中
- 自动化测试全部通过
最近对组成成员进行了一次简单的版本管理与版本控制的分享,其实这些东西都是开发中必不可少的,只是以前的工作重点并没有放在这个方面.废话少说,我们先了解下什么是版本管理与版本控制.
版本管理表示对项目整体版本的演变过程管理,最简单的如v1.0变更至v1.1,从snapshot变更至release.
一般情况下版本发布应该具备以下条件:
最近生产环境的red5经常出现拒绝服务的问题,仔细查看日志后发现所有的请求都是NioProcessor-1来完成,如果请求服务过多,会导致该线程处理不过来,也将导致线上其它服务将无响应,仔细查看了下RTMPMinaTransport构造源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
public void start() throws Exception { initIOHandler(); IoBuffer.setUseDirectBuffer(!useHeapBuffers); // this is global, oh well if (useHeapBuffers) { // dont pool for heap buffers IoBuffer.setAllocator(new SimpleBufferAllocator()); } log.info("RTMP Mina Transport Settings"); log.info("Connection Threads: {}", connectionThreads); log.info("I/O Threads: {}", ioThreads); //use default parameters, and given number of NioProcessor for multithreading I/O operations //acceptor = new NioSocketAcceptor(ioThreads); //create separate executors to handle connections and i/o Executor connectionExecutor = Executors.newFixedThreadPool(connectionThreads); Executor ioExecutor = Executors.newFixedThreadPool(ioThreads); acceptor = new NioSocketAcceptor(connectionExecutor, new NioProcessor(ioExecutor)); acceptor.setHandler(ioHandler); acceptor.setBacklog(50); log.info("TCP No Delay: {}", tcpNoDelay); log.info("Receive Buffer Size: {}", receiveBufferSize); log.info("Send Buffer Size: {}", sendBufferSize); ... } |