jradius响应超长且不稳定排查

Radius协议详解 框架名称开发语言功能特点适用场景开源协议优点缺点官网FreeRADIUSC支持完整 Radius 功能,提供丰富插件和模块搭建 Radius 服务器的项目GPL功能强大,社区活跃配置复杂,学习曲线较高FreeRADIUSTinyRadiusJava轻量级,支持基本 Radius 功能小型 Radius 客户端或服务器LGPL简单易用,纯 Java 实现功能简单,社区支持较少JRadiusJava支持完整 Radius 功能,与 FreeRADIUS 兼容。 阅读详情

背景

    公司内部需要对入网认证作一定的控制,考虑到后端系统都是java写的因此选用jradius作AAA认证系统。
基本数据
    公司内部人员规模: > 23k;
    地域分布:全国大城市都有
    设备量: 至少3倍于 人员规模
    认证频繁度:百万级别 
    分布:极不平衡,高峰期集中在30分钟-1个小时内;
整体结构

现象

1.freeradius出现请求响应时间,日志如下:
Tue Apr  8 09:20:32 2014 : Info: WARNING: Child is hung for request 1095119 in component <core> module <thread>.
Tue Apr  8 09:20:32 2014 : Info: WARNING: Child is hung for request 1095181 in component <core> module <thread>.
Tue Apr  8 09:20:33 2014 : Info: WARNING: Child is hung for request 1095181 in component <core> module <thread>.
Tue Apr  8 09:20:37 2014 : Error: WARNING: Unresponsive child for request 1095307, in component <core> module <thread>
Tue Apr  8 09:20:38 2014 : Info: WARNING: Child is hung for request 1095307 in component <core> module <thread>.
Tue Apr  8 09:20:39 2014 : Info: WARNING: Child is hung for request 1095307 in component <core> module <thread>.
Tue Apr  8 09:20:41 2014 : Error: WARNING: Unresponsive child for request 1095405, in component <core> module <thread>
Tue Apr  8 09:20:41 2014 : Error: Discarding duplicate request from client private-network-1 port 2131 - ID: 220 due to unfinished request 1095405
Tue Apr  8 09:20:42 2014 : Info: WARNING: Child is hung for request 1095405 in component <core> module <thread>.
 日志中有大量的请求处于响应慢的状态

2.该高峰期出现请求响应变成长;
2014-04-08 16:45:45,700 INFO  radius - process nac handler end,consuming_time:xxxxxxx:5083 ms
2014-04-08 16:45:45,700 INFO  radius - process nac handler end,consuming_time:<span style="font-family: Arial, Helvetica, sans-serif;">xxxxxxx</span><span style="font-family: Arial, Helvetica, sans-serif;">:5080 ms</span>
2014-04-08 16:45:45,704 INFO  radius - process nac handler end,consuming_time:xxxxxx:5080 ms
2014-04-08 16:45:45,701 INFO  radius - process nac handler end,consuming_time:xxxxxxx:5078 ms
2014-04-08 16:50:27,084 INFO  radius - process nac handler end,consuming_time:xxxxxxxxxx:5151 ms
2014-04-08 16:50:26,991 INFO  radius - process nac handler end,consuming_time:xxxxxxxxxxx:34617 ms
2014-04-08 16:54:22,686 INFO  radius - process nac handler end,consuming_time:xxxxxxxx:38230 ms
2014-04-08 16:54:22,712 INFO  radius - process nac handler end,consuming_time:xxxxxxxxxxx:5128 ms
  这个是高峰期请求响应的状况,可以看到请求响应都很长,并且出现极端不寻常的值(倒数第二、第三行)

3.系统日志中有调用后端服务链接异常,建立链接超时;
java.net.ConnectException: Connection timed out: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)

分析过程

1.ds压力排查
理由:在认证时调用后端服务器出现链接异常,并且是在高峰期出现,而且后端服务器只有两台;
细分:ds服务器cpu,load,memory各方面系统指标都很低
2.jradius btrace追踪
发现请求确实如日志,进入时间和结束时间有阶段性,某一刻响应特长,隔断时间好了,再某一段时间有出现;
和用户数据没规律
3.jstack分析
jstack jradius线程和基本堆信息,发现里面的java进程基本被占用满(99%),但是一直没oom,怀疑是jradius进程处于oom的临界状态
4.heap分析
heapdump内存信息,mat分析结构,发现JRadiusSessionManager占用了绝大部分内存,存储数据达到了78w条;

分析JRadiusSessionManager结构,该代码采用的是ehcache保存session信息,cache的控制采用ehcache配置引入,ehcache.xml的配置信息如下:
<defaultCache     
            maxElementsInMemory="10000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            
            overflowToDisk="false"
            maxElementsOnDisk="100000"
            diskPersistent="false"
            diskExpiryThreadIntervalSeconds="120"
            
            memoryStoreEvictionPolicy="LRU"
            />
session存储结构如下(其他存储结构这次没用到就不罗列了):
Key: request.getSender():Attr_NASIPAddress.TYPE:Attr_NASIdentifier.TYPE:Attr_UserName.TYPE:Attr_CallingStationId.TYPE:Attr_CalledStationId.TYP
Value: JRadiusSession

jradius官方给出的默认配置,限制了存储10k各数据,算法最近最少使用,计算key和alue已经最大数量存储应该不会导致内存溢出;
难道是代码问题,没有把ehcache的配置生效到代码???
5.分析jradius session模块
看JRadiusSessionManager代码,问题代码如下:
public void afterPropertiesSet() throws Exception
    {
        if (cacheManager == null) 
        {
            cacheManager = CacheManager.create();
        }

        if (sessionCache == null) 
        {
            sessionCache = cacheManager.getCache(cacheName);

            if (sessionCache == null)
            {
                sessionCache = new Cache(cacheName, 1000000, true, false, 0, maxInactiveInterval);
                cacheManager.addCache(sessionCache);
            }
        }

        if (logCache == null) 
        {
            logCache = cacheManager.getCache(logCacheName);

            if (logCache == null)
            {
                logCache = new Cache(logCacheName, 1000000, true, false, 0, maxInactiveInterval);
                cacheManager.addCache(logCache);
            }
        }

        sessionCache.getCacheEventNotificationService().registerListener(this);
        logCache.getCacheEventNotificationService().registerListener(this);
    }
可以看到因为ehcache.xml没有配置jradius-session session,导致实际默认配置采用的是初始化1M的数量;也就解释了为什么导致存储数量是87w左右;
7.分析gc
发现jradius在这种状态进行频繁的fullgc,由于采用的cms,在init和remark阶段会导致java进程停止响应;导致请求全部被hold;而在fullgc结束后,这批数据就进入处理流程,在排队处理一段时间后又进行fullgc,导致再次被hold,因此排队的数据又进入hold中;
一次fullgc:7s
一次响应:40s
多次fullgc使得排队的时延:7*n响应
总结
1.jradius给出错误的配置,导致使用jradius默认的ehcache.xml配置实现出错;
2.内存在处于临界点时要观察gc情况,可能能更快定位问题;
















 

jradius+freeRadius 搭建AAA认证服务 因为freeradius是c写的,而需求是需要java搭建radius服务器,jradius正好是java写的,在freeradius3.0以下把jradius的模块映射出去,这样就可以用java代码来操作java端的服务器。 本资源好几个人搭建1个周,过程很艰难,全网就两篇文章可参考,其他都是雷同;当前资源包含 freeradius服务端,jradius服务端,一份详细的安装文档,各种安装过程中遇到的问题都会说到,当前项目已经是项目当中使用的,放心下载。 立即下载

相关推荐

jradius源码,可以直接部署

jradius的源码,已经在项目中使用过

Jradius+freeRadius+mysql安装与配置

1.yum install openssl 2.yum install openssl-devel ============================================================================= JRadius 服务端安装 3.在/usr目录下创建jradius目录,把server.zip包上传到jradius目录下 ...

zhiqiang_zhao 2245

jradius客户端

java版本的radius认证服务模块,能够在认证通信中发挥作用

freeradius and jradius configuration

前一阶段为了验证一个需求,需要配置freeradius 和 jradius,这里把过程记录下来。 首先说明一下工作原理,freeradius是处理NAS的请求,提供AAA(认证,授权,计费)的服务,jradius 是为java开发者提供,如果需要一些定制的服务就需要自已来写代码,要想用jradius需要在freeradius中安装freeradius的rlm_jradius模块,NAS将requ

刺客的专栏 2444

jradius-client-1.0.0-release.zip_JRadius API_bcprov a_java radiu

This is java Radius API

jradius-1.1.5

jradius-1.1.5开源框架

freeRadius2.2.3+jradius1.1.4配置手记

每个版本的不同组合都有不同的坑,折腾了两三天,总算把最新版freeRadius2.2.3+jradius1.1.4配置成功。虽然jradius1.0.0和freeradius整合很容易配置,但是它本身是一个beta版,已知的bug太多。高版本虽然有也存在bug,但至少修改了之前低版本已知的bug。所以还是以高版(1.1.4)为基础进行折腾。freeRadius的最新稳定版是2.2.3, 基于相同的

诗剑书生的专栏 6285

别再手动填数据了!Vivado里用.coe文件给ROM IP核预装数据的保姆级教程

本文详细介绍了在Vivado中使用.coe文件为ROM IP核预装数据的全流程教程,包括文件格式规范、数据转换技巧和Vivado配置指南。通过自动化数据加载,开发者可以显著提升FPGA开发效率,避免手动输入错误,适用于查找表、波形存储等多种应用场景。

weixin_33377602的博客 337

freeRadius配置和java认证

一、环境搭建 1、环境安装 yum install freeradius freeradius-utils 2、配置用户信息 修改配置文件/etc/raddb/users 增加用户信息如下 test111 Cleartext-Password := “password” 3、服务启动 以debug模式启动命令:radiusd -X 正常启动命令: systemctl start radiusd s...

weixin_37655163的博客 1883

STM32F103C8T6通过ESP8266连接阿里云物联网平台(附代码)

STM32F103C8T6连接阿里云物联网平台(1)—阿里云lot Studio控制 Web开发 分享一下自己使用stm32f103c8t6通过ESP_01模块连接阿里云物联网平台,实现温湿度上传和控制命令下达的过程,能力有限,用的是最简单的方法,如有错误,多多担待。 一、硬件选型 1、 stm32f103c8t6 2、ESP_01 wifi模块 3、其他 二、硬件连接 WSP_01 STM32F103C8T6 RXD PA2 TXD PA3 RES PA4 VCC 3.3

weixin_A13253323604 3万+

TMS320F280039 CMD文件配置避坑指南:从.map文件看懂内存分配与溢出排查

本文详细解析了TMS320F280039芯片的CMD文件配置问题,通过.map文件分析内存分配与溢出排查。文章提供了实用的诊断技巧和解决方案,帮助开发者有效应对段溢出、地址重叠和栈堆冲突等常见问题,优化DSP程序的内存管理。

weixin_29168813的博客 442

JRadius

[quote] JRadius is an open-source Java RADIUS client and server framework. The JRadius client helps you to implement RADIUS authentication and accounting in your Java application. The JRadius s...

forhope的专栏 572

Gemini 2.5 Pro国内免魔法直连教程:5分钟搞定专业级PPT图表(附折线图/柱状图案例)

本文详细介绍了如何利用Gemini 2.5 Pro快速生成专业级PPT图表,包括折线图和柱状图等常见商业图表。通过自然语言交互和智能图表生成功能,用户可以在5分钟内完成数据可视化,大幅提升工作效率。文章还提供了实战案例和高级技巧,帮助用户轻松应对各种商业场景需求。

weixin_30733003的博客 460

jradius+freeRadius 搭建AAA认证服务指南

jradius+freeRadius 搭建AAA认证服务指南 去发现同类优质开源项目:https://gitcode.com/ 介绍 本仓库提供的资源是一份详尽的搭建AAA认证服务的教程,主要围绕如何使用jradius与freeRadius实现基于Java的radius服务器构建。在此项目中,由于freeradius是基于C语言开发的,而实际需求需要Java环境来搭建radius服务器,因此采用了...

gitblog_06749的博客 951

【自动驾驶控制算法】 第一讲 绪论

声明【自动驾驶控制算法】系列是博主对所分享教学内容的学习笔记,并且该系列每篇博客都会将博主听课后总结的纸质版笔记附于文末,供大家参考。是一位研究汽车领域,无人驾驶方向及其相关方向的大佬,也算是博主在无人驾驶方向的启蒙老师。所以研究相关领域的朋友推荐去听一听他的视频讲解。...

iamtbon_1的博客 1796

Ubuntu22.04下安装LDAP

在Ubuntu22.04的时候可以使用apt的方式来安装,在安装LDAP的web 服务器的时候可以考虑选择 LDAP 帐户管理器 (LAM)。因为 PHPLDAPadmin 安装时需要 php 的环境依赖,相对来说安装麻烦。此外在 PHPLDAPadmin 中创建组织和用户时与平常的语法有很大不同,对新手来说不友好。

dl_11的博客 3944

freeradius client 和jradius安装编译

freeradius client radtest只是用来调试的,radclient功能更强大。用法如下: From the man page we can see that radclient gives us much more power as compared to radtest. The following command can be used as an equivalent ...

weixin_34403693的博客 701

Jetson AGX Orin平台Jetpack5升级Jetpack6,自研载板USB不工作问题调试

1. 问题描述将AGX Orin工业的新板放到定制的载板上当在ubuntu 22和Jetpack 6.1上使用SDKManager刷机时,lsusb为空,并且在引导时没有发现/注册xusb设备。USB C端口正常打开并供电,但似乎没有数据传输。在Ubuntu 18 Jetpack 5.1.4 SDKManager上同样刷机之后,usb C集线器在引导时被正确地发现,显示在lsusb中,并识别/挂载外部驱动器。

jzwjzw19900922的博客 1509

jradius+freeRadius搭建AAA认证服务指南:高效安全的认证解决方案

jradius+freeRadius搭建AAA认证服务指南:高效安全的认证解决方案 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在网络安全领域,认证、授权和审计(AAA)是确保系统安全性的关键环节。今天,我们将为您介绍一个开源项目——jradius+freeRadius搭建AAA认证服务指南,这是一个基于Java和C语言混合开发,旨在帮助开发者快速搭建属于自己的Ra...

gitblog_06716的博客 666

Android Camera驱动开发工程师面试指南:技术深度与实战准备

摘要:上海移远通信招聘Android Camera驱动开发工程师,主要负责Camera传感器驱动开发维护、高通/展锐平台底层开发及技术预研。岗位要求1年以上嵌入式开发经验,精通Camera传感器驱动调试,熟悉高通平台Camera架构及Android HAL框架。具备HAL开发、算法集成或车载/支付行业经验者优先。工作内容以Driver/HAL开发为主,需具备硬件接口评估能力。该职位接受Linux/单片机背景人员转型。

郑伟强dev的专栏 280

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java开源身份验证

 <h4 onclick="function onclick(){function onclick(){DictFold(PWDECMEC1);}}"> JOSSO JOSSO(Java Open Single Sign-On)是一个开源的J2EE-based的SSO(SSO:单一登录技术是一种认证和授权机制,它允许注册用户只需要在任一成员网站上登录一次

小菜的粉丝——专栏 8961

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

一次低级的错误耽误了一周时间

春节前测试nas设备和freeradius服务器之间的联调。radius服务无论使用freeradius的radtest程序还是jradius的代码都测试正常。但是从nas设备发过来密码就是不正确。开始以为是加密方式不一致,经过udp抓包比对都是pap方式加密,但是密码坚决不正确。前节因为没有太多时间就放假了,只能拖到节后调试。春节在家闲着的时候又把rasius协议和jradius的实现全部看一遍

诗剑书生的专栏 2236

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

RADIUS服务器不是消息,在Radius服务器上配置jradius问题

我已经在我的Ubuntu 12.04上安装并配置了free radius。 现在我想用jradius服务器配置我的freeradius。 我从coova文档遵循从这里在Radius服务器上配置jradius问题这一步解释说,我必须等上增加一些配置/的freeradius/radiusd.conf和/ etc /的freeradius /启用站点-/默认。现在,当我尝试运行我的RADIUS服务器我得...

weixin_33637634的博客 516

2012.05.15.offer大图页小需求预发布出现cpuload过高问题排查

现象: 李景发布laputa小需求,修改offer大图逻辑,调用search,重启不久出现cpu占用一度飙升到45左右。 背景: 排查过程: what: cpu占用过高,而且几乎暂用了全部的8核,肯定是线程死循环导致的。 查看java线程,cpu占用800-900%,查看java线程信息(top -H),发现部分线程cpu占用时间极高,取9288 lwp(内存占用在50%左右),查看堆

madding 2209
上一篇: windows wifi tls认证分析
下一篇: openssl 证书操作命令
「已注销」
博客等级 码龄20年 47粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值