亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

如何設(shè)置tomcat線程池大???

MartinHan / 1514人閱讀

摘要:背景在我們的日常開(kāi)發(fā)中都涉及到使用做為服務(wù)器,但是我們?cè)撛O(shè)置多大的線程池呢以及根據(jù)什么原則來(lái)設(shè)計(jì)這個(gè)線程池呢接下來(lái),我將介紹本人是怎么設(shè)計(jì)以及計(jì)算的。

背景

在我們的日常開(kāi)發(fā)中都涉及到使用tomcat做為服務(wù)器,但是我們?cè)撛O(shè)置多大的線程池呢?以及根據(jù)什么原則來(lái)設(shè)計(jì)這個(gè)線程池呢?接下來(lái),我將介紹本人是怎么設(shè)計(jì)以及計(jì)算的。

具體方法

眾所周知,tomcat接受一個(gè)request后處理過(guò)程中,會(huì)涉及到cpu和IO時(shí)間。其中IO等待時(shí)間,cpu被動(dòng)放棄執(zhí)行,其他線程就可以利用這段時(shí)間片進(jìn)行操作。所以我們可以采用服務(wù)器IO優(yōu)化的通用規(guī)則。
線程大小 = ( (線程io時(shí)間 + 線程cpu) / 線程cpu time) * cpu核數(shù)

舉例

線程io時(shí)間為100ms(IO操作比如數(shù)據(jù)庫(kù)查詢,同步遠(yuǎn)程調(diào)用等),線程cpu時(shí)間10ms,服務(wù)器物理機(jī)核數(shù)為4個(gè)。通過(guò)上面的公式,我們計(jì)算出來(lái)的大小是 ((100 + 10 )/10 ) *4 = 44。理論上我們有依據(jù),但是實(shí)際計(jì)算過(guò)程中我們?cè)趺粗谰€程IO時(shí)間和cpu時(shí)間呢? 這個(gè)就涉及到實(shí)際編碼過(guò)程中的怎么樣監(jiān)控處理時(shí)間啦。

通過(guò)java 實(shí)現(xiàn)內(nèi)置的filter接口,我們可以拿到一個(gè)request消耗的總時(shí)間

public class MoniterFilter implements Filter {
  
    @Override
    public void doFilter(ServletRequest request, ServletResponse response,  
                            FilterChain chain) throws IOException,
                             ServletException {
        long start = System.currentTimeMillis();
        String params = getQueryString(httpRequest);
        try {
            chain.doFilter(httpRequest, httpResponse);
        } finally {
            logger.info("access url [{}{}], cost time [{}] ms )", uri, 
                        params, cost);
        }
  
    private String getQueryString(HttpServletRequest req) {
        StringBuilder buffer = new StringBuilder("?");
        Enumeration emParams = req.getParameterNames();
        try {
            while (emParams.hasMoreElements()) {
                String sParam = emParams.nextElement();
                String sValues = req.getParameter(sParam);
                buffer.append(sParam).append("=").append(sValues).append("&");
            }
            return buffer.substring(0, buffer.length() - 1);
        } catch (Exception e) {
        }
        return "";
    }
}

通過(guò)添加切面來(lái)監(jiān)控線程IO耗時(shí)(jdk,cglib)

public class DaoInterceptor implements MethodInterceptor {

    private static final Logger logger = LoggerFactory.getLogger(DaoInterceptor.class);

    @Override
    public Object invoke(MethodInvocation invocation) throws Throwable {
        StopWatch watch = new StopWatch();
        watch.start();
        Object result = null;
        Throwable t = null;
        try {
            result = invocation.proceed();
        } catch (Throwable e) {
            t = e == null ? null : e.getCause();
            throw e;
        } finally {
            watch.stop();
            logger.info("({}ms)", watch.getTotalTimeMillis());

        }

        return result;
    }
}

通過(guò)上述代碼就可以計(jì)算出相應(yīng)時(shí)間,從而計(jì)算出線程大小啦。但是我們就到此為止了嗎?
其實(shí)還沒(méi)有,計(jì)算出的數(shù)值只是存在理論情況下,我們還是需要通過(guò)壓測(cè)工具(Jmeter)來(lái)壓測(cè)一下線服務(wù)器,同時(shí)根據(jù)qps值來(lái)動(dòng)態(tài)微調(diào)剛才計(jì)算出的線程池大小。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/64536.html

相關(guān)文章

  • 幾種限流技術(shù)

    摘要:下面是幾種常見(jiàn)的限流技術(shù)一限流算法常用的限流算法有令牌桶,漏桶令牌桶令牌桶算法是網(wǎng)絡(luò)流量整形和速率限制中最常使用的一種算法。 就秒殺接口來(lái)說(shuō),當(dāng)訪問(wèn)頻率或者并發(fā)請(qǐng)求超過(guò)其承受范圍的時(shí)候,這時(shí)候我們就要考慮限流來(lái)保證接口的可用性,以防止非預(yù)期的請(qǐng)求對(duì)系統(tǒng)壓力過(guò)大而引起的系統(tǒng)癱瘓。通常的策略就是拒絕多余的訪問(wèn),或者讓多余的訪問(wèn)排隊(duì)等待服務(wù)。下面是幾種常見(jiàn)的限流技術(shù) 一、限流算法常用的限流算...

    Warren 評(píng)論0 收藏0
  • Tomcat使用線程配置高并發(fā)連接

    摘要:配置重要參數(shù)說(shuō)明表示使用該參數(shù)值對(duì)應(yīng)的線程池服務(wù)器啟動(dòng)時(shí)創(chuàng)建的處理請(qǐng)求的線程數(shù)最大可以創(chuàng)建的處理請(qǐng)求的線程數(shù)指定當(dāng)所有可以使用的處理請(qǐng)求的線程數(shù)都被使用時(shí),可以放到處理隊(duì)列中的請(qǐng)求數(shù),超過(guò)這個(gè)數(shù)的請(qǐng)求將不予處理。 1:配置executor屬性 打開(kāi)/conf/server.xml文件,在Connector之前配置一個(gè)線程池: 重要參數(shù)說(shuō)明:name:共享線程池的名字。這是Conn...

    Meathill 評(píng)論0 收藏0
  • Tomcat 7 server.xml 配置文件詳解

    摘要:每個(gè)可以創(chuàng)建一個(gè)線程池,但是可以在以及其他組件之間共享,只要那些組件配置之后支持。線程池最大活躍線程數(shù)量,默認(rèn)。如果配置了組件防止泄露的監(jiān)聽(tīng)器,它會(huì)通知停止環(huán)境。如果未指定此屬性,會(huì)使用一個(gè)私有的內(nèi)部來(lái)提供線程池。 概覽 Tomcat7作為Servlet/JSP容器,它的全部行為的配置指令,包含在/conf/server.xml文件中,這個(gè)文件是一個(gè)無(wú)預(yù)定義結(jié)構(gòu)的XML文件,所有的屬性...

    crossoverJie 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<