Thrift的java版api实现得相当简单,使用的时候如果想监控就非常难。比如我想使用TThreadPoolServer,就没法知道当前创建了多少个线程在干活,离线程爆满还差多少。而且,这个server用的队列是SynchronousQueue,顾名思义,这个队列无法缓冲任务。当任务过多、所有线程都在忙时,就会造成客户端阻塞。
因此,有必要改进一下,我们可以自己实现一个Server来完成这些feature。鉴于本博客的读者对代码意见很大,就不贴代码了,仅说一下想法:
- 建立一个自己的Server类
- 把TThreadPoolServer的代码copy过来
- 修改队列实现,改成LinkedBlockingQueue或者你喜欢的什么。
- 提供一个getStatus()方法,打印Server的当前变量值,比如我的打印结果是:
<Server status: ...queue size: 0...max queue size: 30000...active threads: 0...threads in pool: 14...max threads: 200...tasks completed: 14> - 在自己的Server实现里,加一个线程,每隔5秒打印一次上面收集到的信息。
- 写个小脚本,每隔几秒来看一下这个java进程的日志打印,如果超过一定时间没有更新,就说明java进程挂了。如果多写一点,就能判断出java进程是否太忙、任务太满了。