关于监控

线程池的监控
根据上面ExecutorService对象即可获取一般线程池需要监控的所需信息。
@Override
public void monitor(Map<String, String> monitor) {
    long tmp = executor.getCompletedTaskCount();
    int qsize = executor.getQueue().size();
    monitor.put(QUEUE_LEN, String.valueOf(qsize));
    int activeCount = executor.getActiveCount();
    monitor.put(WORK_THREAD, String.valueOf(activeCount));
    monitor.put(ALIVE_THREAD, String.valueOf(executor.getPoolSize()));
    int corePoolSize = executor.getCorePoolSize();

    monitor.put(CORE_THREAD, String.valueOf(corePoolSize));
    monitor.put(MAX_THREAD, String.valueOf(executor.getMaximumPoolSize()));
    monitor.put(COMPLETE_TASK, String.valueOf(tmp));
    monitor.put(TOTAL_TASK, String.valueOf(executor.getTaskCount()));

    int maxPoolSize = executor.getMaximumPoolSize();
    int count = (int) (tmp - cmpcount);
    cmpcount = tmp;
    monitor.put(TPS, String.valueOf(count));
    Date d = new Date();
    SimpleDateFormat now = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss");
    String nowDate = now.format(d);
    //如果为空证明没有报过,如果不为空则证明报过忽略,放入告警10分钟后过期                !!!监控队列     但前activecount线程 总线成书。
    if ( (qsize * 100 / poolConfig.getQueueSize() >= 80) && (null == this.queueAlarmed.get(this.name))) {
        this.queueAlarmed.put(this.name, Boolean.TRUE, 10 * 60);
        this.alarm.sendAlarm(this.name, "PROBLEM:[" + this.name + "-pool]"+ ":" +activeCount+"/"+maxPoolSize+",队列:"+ qsize + "/"+ poolConfig.getQueueSize()+"/"+nowDate);

    } else if ((activeCount * 100 / maxPoolSize < 80) && (null != this.queueAlarmed.get(this.name))) {
        //已经报过警,并且活动线程数小于corepoolsize的70%则认为恢复
        this.alarm.sendAlarm(this.name, "OK:[" + this.name + "-pool]"+ ":" +activeCount+"/"+maxPoolSize+",队列:"+ qsize + "/"+ poolConfig.getQueueSize()+"/"+nowDate);
        this.queueAlarmed.remove(this.name);}
JVM的监控
主要涉及到lang包中的Runtiem类。
// max memory for this JVM
long maxMemory = Runtime.getRuntime().maxMemory();

// memory already allocated
long allocatedMemory = Runtime.getRuntime().totalMemory();
// already used allocated memory
long allocatedFreeMemory = Runtime.getRuntime().freeMemory();

// total usable memory for this JVM
long totalFreeMemory = maxMemory - allocatedMemory + allocatedFreeMemory;


// get thread count
ThreadGroup parentThread;
for (parentThread = Thread.currentThread().getThreadGroup(); parentThread.getParent() != null; parentThread = parentThread.getParent())
   ;
int totalThread = parentThread.activeCount();

monitor.put(MAX_MEMORY, maxMemory+"");
monitor.put(FREE_MEMORY, totalFreeMemory+"");
monitor.put(THREAD_COUNTS, totalThread+"");
尊敬的相关部门负责人, 我写信是为了就监控室防火门外开一事向您提出建议。作为一个关注安全问题的人士,我注意到监控室防火门外开的情况可能存在一些潜在的安全隐患,并希望能够就此向您提供一些建议。 首先,我建议您对监控室防火门外开的情况进行全面的安全评估。这包括检查门的状态是否良好,密封性是否正常以及是否存在漏洞。如果存在任何问题,立即采取必要的维修和修复措施,确保门的正常运作和防火功能。 其次,我建议您加强对监控室防火门的访问控制。只有授权人员才能进入该区域,并确保他们具备必要的安全意识和紧急情况处理能力。此外,您还可以考虑安装电子锁或使用刷卡系统,以进一步限制访问。 另外,为了提高紧急疏散的效率,建议在监控室内外设置明显的疏散标志和指示牌。这样,在发生火灾或其他紧急情况时,工作人员能够迅速找到最近的安全出口,并采取适当的行动。 最后,我建议您定期进行应急演练和培训,以确保工作人员了解如何正确应对火灾和其他紧急情况。演练可以帮助他们熟悉疏散路线和使用灭火器等紧急设备的方法。此外,培训还可以加强员工的安全意识,提高他们对紧急情况的反应能力。 总之,监控室防火门外开是一个需要重视和解决的问题。通过加强安全评估、访问控制、疏散标志和培训,我们可以最大程度地减少潜在的安全风险,并提高紧急情况下的应对能力。 谢谢您对此事的关注,我希望我的建议能够对您有所帮助。如果您需要进一步的讨论或有任何疑问,请随时与我联系。 祝好! 此致, [C知道]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值