APR为JBoss AS加速:实现分析

  •  
APR为JBoss加速主要通过基于APR和JNI(Java Native Interface)的Connector实现。具体包括:Connector、JNI和集成。
Connector
1、 基于APR的HTTP11 Connector实现
org.apache.coyote.http11. Http11NioProcessor
org.apache.coyote.http11. Http11AprProtocol
2、 基于APR的AJP Connector实现
org.apache.coyote.ajp. AjpAprProcessor
org.apache.coyote.ajp. AjpAprProtocol
JNI实现
1、 Connector
Java接口:org.apache.tomcat.jni.Library
C实现:native connector的src目录
2、 SSL
Java接口:org.apache.tomcat.jni.SSL
C实现:native connector的src目录
 
APR集成
1、 JNI库的初始化和清除
APR的初始化通过Server的LifecycleListener接口实现,配置在server.xml中,xml片断如下:
<Server>
 
 <!--APR library loader. Documentation at /docs/apr.html -->
 <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />
……
 
JNI库在Server的Lifecycle的INI_EVENT时进行初始化,在AFTER­_STOP_EVENT时进行清除,具体代码如下:
 
/**
     * Primary entry point for startup and shutdown events.
     *
     * @param event The event that has occurred
     */
    public void lifecycleEvent(LifecycleEvent event) {
 
        if (Lifecycle.INIT_EVENT.equals(event.getType())) {
            aprInitialized = init();
            if (aprInitialized) {
                try {
                    initializeSSL();
                } catch (Throwable t) {
                    if (!log.isDebugEnabled()) {
                        log.info(sm.getString("aprListener.sslInit"));
                    } else {
                        log.debug(sm.getString("aprListener.sslInit"));
                    }
                }
            }
        } else if (Lifecycle.AFTER_STOP_EVENT.equals(event.getType())) {
            if (!aprInitialized) {
                return;
            }
            try {
                terminateAPR();
            } catch (Throwable t) {
                if (!log.isDebugEnabled()) {
                    log.info(sm.getString("aprListener.aprDestroy"));
                } else {
                    log.debug(sm.getString("aprListener.aprDestroy"), t);
                }
            }
        }
 
    }
 
 
2、 Connector选用
 
public Connector(String protocol)
        throws Exception {
        setProtocol(protocol);
        // Instantiate protocol handler
        try {
            Class clazz = Class.forName(protocolHandlerClassName);
            this.protocolHandler = (ProtocolHandler) clazz.newInstance();
        } catch (Exception e) {
            log.error
                (sm.getString
                 ("coyoteConnector.protocolHandlerInstantiationFailed", e));
        }
    }
 
 
    /**
     * Set the Coyote protocol which will be used by the connector.
     *
     * @param protocol The Coyote protocol name
     */
    public void setProtocol(String protocol) {
 
        // Test APR support
        initializeAPR();
 
        if (aprInitialized) {
            if ("HTTP/1.1".equals(protocol)) {
                setProtocolHandlerClassName
                    ("org.apache.coyote.http11.Http11AprProtocol");
            } else if ("AJP/1.3".equals(protocol)) {
                setProtocolHandlerClassName
                    ("org.apache.coyote.ajp.AjpAprProtocol");
            } else if (protocol != null) {
                setProtocolHandlerClassName(protocol);
            } else {
                setProtocolHandlerClassName
                    ("org.apache.coyote.http11.Http11AprProtocol");
            }
        } else {
            if ("HTTP/1.1".equals(protocol)) {
                setProtocolHandlerClassName
                    ("org.apache.coyote.http11.Http11Protocol");
            } else if ("AJP/1.3".equals(protocol)) {
                setProtocolHandlerClassName
                    ("org.apache.jk.server.JkCoyoteHandler");
            } else if (protocol != null) {
                setProtocolHandlerClassName(protocol);
            }
        }
 
    }
 
说明:Connector构造函数调用setProtocol函数设置Connector处理请求的Protocol Handler。在setProtocol函数中,只要能够成功地初始化APR,将使用基于APR的实现的org.apache.coyote.http11.Http11AprProtocol和org.apache.coyote.ajp.AjpAprProtocol作为请求处理的Protocol Handler。


Web服务器从部署到生产:性能调优与安全加固实战指南 Web服务器是承载网站和应用程序的核心基础设施,其配置与管理直接影响服务的稳定性、性能与安全。从基础概念来看,Web服务器(如Nginx、Apache)负责处理HTTP请求,而应用服务器(如Tomcat、Node.js)则运行业务逻辑,两者常通过反向代理模式协同工作。在原理层面,合理的线程池配置、连接数管理和缓存策略是保障高并发的关键,例如通过调整Tomcat的maxThreads参数或配置Nginx的proxy_cache模块。这些调优技术的核心价值在于提升资源利用率、降低响应延迟,并构建可扩展的服务架构 阅读详情

相关推荐

Heartbleed漏洞深度解析:OpenSSL内存越界与修复实战

Heartbleed(CVE-2014-0160)是典型的SSL/TLS底层库内存越界读取漏洞,源于OpenSSL心跳机制中缺乏长度校验,导致攻击者可无痕窃取服务器内存敏感数据。其原理本质是C语言层面的缓冲区边界失控,技术价值在于暴露了密码学基础组件‘信任根’的脆弱性——即便上层应用安全合规,底层库缺陷仍可击穿整个PKI信任链。典型应用场景涵盖Web服务器、邮件系统、云原生容器及物联网固件等广泛依赖OpenSSL的基础设施。本文聚焦真实生产环境中的精准识别、安全修复与三重验证,特别强调OpenSSL版本判断

weixin_30383279的博客 478

APR为JBoss AS加速:介绍

 APR的全称为Apache Portable Runtime,出自名门Apache。说到APR就要从大名鼎鼎的Apache Http 服务器说起,在Apache Http服务器早期版本的开发中,为了能够在各个平台上移植,必须要处理各种具体操作系统平台的细节,并针对不同的平台调用不同的处理函数。随着 Apache Http服务器的进一步开发,Apache组织决定将这些通用的函数独立出来并发展成

JBossWeek的专栏 1382

FreeSWITCH安装指南:三种部署方式解析与实践对比

Freeswitch部署方案比较:Yum安装简单快捷但灵活性差;源码安装可定制性强,适合深度开发和性能优化;Docker部署环境一致性好但网络配置复杂。生产环境推荐源码安装以获得最佳性能和定制能力,而Docker适合快速部署和扩展。不同方案各有利弊,需根据具体需求选择。

c_zyer的博客 2138

APR为JBoss AS加速:HTTP Connector配置

 HTTP connector使用sendfile处理大的静态文件(所有这些大文件都使用高性能的内核级调用通过异步方式发送),使用socket poller实现keepalive,提升服务器的扩展性。下面列出HTTP connector支持的属性:  Attribute

JBossWeek的专栏 3798

OC5021B 100V宽电压输入 LED车灯/大功率照明 DC降压型恒流驱动器

适用于LED大功率汽车大灯/大功率照明 OC5021B 100V宽电压输入 5A电流设计 DC-DC降压型恒流驱动IC

Handsome63841990的博客 2413

Docker+vLLM内网离线部署Qwen3 流程

本文介绍了在CentOS 7系统下进行VLLM容器化部署Qwen3-32B大模型的内网离线方案。首先需准备Nvidia显卡驱动、CUDA 12.4和Docker环境。通过联网机器拉取vllm/vllm-openai镜像并导入内网服务器,同时从魔塔社区下载模型文件。部署时使用docker run命令启动容器,配置了GPU资源、内存共享、端口映射等参数,特别指定了模型路径、并行计算、内存利用率等关键参数。该方案实现了大模型在内网环境的安全高效部署,适用于需要离线运行的AI推理场景。

qq_42881308的博客 1036

APR为JBoss AS加速:HTTPS Connector配置

 当启用APR时,HTTPS connector将使用socket poller实现keepalive,增加服务器的扩展性。它还使用OpenSSL,这比使用依赖处理器的JSSE更能优化服务器的性能,并且能够与许多商业加速组件配合使用。与HTTP connector不同的是,HTTPS connector不能使用sendfile优化静态文件处理的性能。除了提供与HTTP APR connec

JBossWeek的专栏 2312

信号编辑软件ZX/SignalEditing

信号编辑软件ZX/SignalEditing

weixin_45661395的博客 955

APR为JBoss AS加速:安装

 套装的JBoss AS 4.2是一个100%纯Java的应用服务器,没有提供APR的支持。Web容器使用的是嵌入的Tomcat6,Http处理使用java处理。缺省情况下当启动JBoss AS时,会出现如下警告信息:13:39:51,031 INFO [AprLifecycleListener] The Apache Tomcat Native library which allow

JBossWeek的专栏 1905

【NLP】文献翻译4——CH-SIMS:中文多模态情感分析数据集与细粒度的模态注释

CH-SIMS: A Chinese Multimodal Sentiment Analysis Dataset with Fine-grained Annotations of Modality摘要1. 介绍2. 相关工作2.1 多模态数据集2.2 多模态情感分析2.3 多任务学习3. CH-SIMS 数据集3.1 数据获取3.2 标注3.3 特征提取4. 多模式多任务学习框架4.1 单模态子网4.2 特征融合网络4.3 优化目标5. 实验5.1 基准5.2 实验的细节5.3 结果和讨论5.3.1 与

YoungSeng's Blog 1万+

Flink CDC 实战:5分钟搞定PostgreSQL数据实时同步(附避坑指南)

本文详细介绍了如何使用Flink CDC实现PostgreSQL数据的实时同步,包括环境配置、逻辑复制槽创建、Flink环境搭建及实战验证。通过5分钟快速指南,帮助开发者高效搭建实时数据管道,并提供了常见问题排查和生产环境优化建议。

red88的博客 818

APR为JBoss AS加速:AJP Connector配置

 AJP connector使用socket poller实现keepalive,增加了服务器的扩展性。因为AJP以持久(或者近似持久)连接为中心进行设计,所以能够极大地减少JBoss Web所需的处理线程数量。与HTTP connector不同的是,AJP connector不能使用sendfile优化处理静态文件时的性能。AJP connector支持的属性如下:

JBossWeek的专栏 2898

Ubuntu下NVIDIA驱动安装全攻略:从报错到完美运行nvidia-smi的完整流程

本文提供了在Ubuntu系统中安装NVIDIA驱动的完整解决方案,重点解决因驱动版本冲突、内核模块未加载或Secure Boot安全启动导致的`nvidia-smi`报错问题。通过彻底清理旧驱动、处理Secure Boot、选择兼容版本并正确安装,最终确保驱动完美运行。

weixin_29196891的博客 364

jboss性能优化

为了优化jboss的性能,对jboss服务器做了如下改动。 设置jvm 参数 安装jboss-native  降低jboss输出日志的等级  起用了jboss内的tomcat对传输数据的压缩功能  使用ehcache做hibernate的二级缓存 下面就以上的各改动做详细说明,为了表述方便代表jboss的安装目录: 设置 jvm 参数 编辑/bin/ru

Java档案 665

GEE:基于自定义的年度时序数据集进行LandTrendr变化检测

本文介绍了使用年度时序数据进行LandTrendr变化检测的方法,包括核心函数调用、参数设置和结果可视化。通过筛选参数(年份、变化幅度和持续时间)对结果进行过滤,输出变化年份、变化幅度和持续时间。代码提供了完整的处理流程,包括数据输入、LandTrendr算法运行、结果筛选与可视化,并支持结果导出。适用于基于Google Earth Engine平台的地表变化检测分析。

养乐多的博客 751

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

JBoss Web和 Tomcat的区别

     在Web2.0的浪潮中,各种页面技术和框架不断涌现,为服务器端的基础架构提出了更高的稳定性和可扩展性的要求。近年来,作为开源中间件的全球领导者,JBoss在J2EE应用服务器领域已成为发展最为迅速的应用服务器。在市场占有率和服务满意度上取得了巨大的成功,丝毫不逊色于其它的非开源竞争对手,如WebSphere、WebLogic、Application Server。JBoss Web的

木子叶家园 476

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

鲲鹏云服务器开发项目,鲲鹏云服务器运行Python项目

鲲鹏云服务器运行Python项目 内容精选换一换简要介绍VCFtools是一种可以对VCF文件和BCF文件进行格式转换及过滤的工具,其中很多过滤及计算功能可以自己使用perl或者python编写脚本实现,但都不如这个工具的运算速度快。开发语言:C/C++一句话描述:一种可以对VCF文件和BCF文件进行格式转换及过滤的工具开源协议:LGPL v3建议的版本根据实际需要选择版本,本文档以v弹性云服务器...

weixin_32327615的博客 357

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

上一篇: APR为JBoss AS加速:实现分析
下一篇: jBPM jPDL 3.2用户指南:第1章介绍
JBossWeek
博客等级 码龄20年 41粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值