CVE-2022-0540 Jira身份验证绕过漏洞分析
Jira身份验证绕过漏洞分析:CVE--
漏洞描述
Atlassian Jira作为一套缺陷跟踪管理系统,源码被广泛应用于各类问题和缺陷的分析跟踪管理。然而,源码该系统最近被发现存在身份验证绕过漏洞(CVE编号:CVE--),分析允许攻击者通过特制的源码HTTP请求,绕过WebWork操作中的分析-45源码身份验证和授权要求,对系统进行非授权访问。源码
利用范围
受影响的分析软件包括Atlassian Jira及其服务管理版本。
漏洞分析
在进行环境搭建时,源码使用Docker技术构建了一个测试环境。分析随后,源码对源码进行了分析,分析将相关文件夹设置为Libraries,源码以便于后续调试。分析
在分析过程中,源码我们了解到Jira采用了MVC框架WebWork来处理用户请求,并使用Seraph作为认证框架。Seraph通过Servlet和Filter实现,用于将请求与特定用户关联。
通过静态和动态分析,我们发现Seraph过滤器会在doFilter方法中根据请求用户权限进行判断,并进一步确定所需角色。在请求URL的解析过程中,攻击者通过在URL中插入“;”字符,ssm框架源码大全可以绕过认证机制,访问不受权限控制的资源。然而,实际访问时还需要进行额外验证。
在后续的调试过程中,我们发现Filter中获取URL的方式为getRequestURL,并在Servlet中使用getServletPath。通过修改URL构造,攻击者能够在绕过认证层后访问特定资源。
修复建议
受影响用户应尽快将产品更新至最新安全版本。官方公告提供了详细的升级指南和修复信息。确保所有Atlassian Jira及服务管理版本的用户及时采取行动,以保护系统安全。
Linux内核源码解析---cgroup实现之整体架构与初始化
cgroup在年由Google工程师开发,于年被融入Linux 2.6.内核。它旨在管理不同进程组,监控一组进程的行为和资源分配,是Docker和Kubernetes的基石,同时也被高版本内核中的LXC技术所使用。本文基于最早融入内核中的代码进行深入分析。
理解cgroup的核心,首先需要掌握其内部的常用术语,如子系统、分时神器app源码层级、cgroupfs_root、cgroup、css_set、cgroup_subsys_state、cg_cgroup_link等。子系统负责控制不同进程的行为,例如CPU子系统可以控制一组进程在CPU上执行的时间占比。层级在内核中表示为cgroupfs_root,一个层级控制一批进程,层级内部绑定一个或多个子系统,每个进程只能在一个层级中存在,但一个进程可以被多个层级管理。cgroup以树形结构组织,每一棵树对应一个层级,层级内部可以关联一个或多个子系统。
每个层级内部包含的节点代表一个cgroup,进程结构体内部包含一个css_set,用于找到控制该进程的所有cgroup,多个进程可以共用一个css_set。cgroup_subsys_state用于保存一系列子系统,数组中的每一个元素都是cgroup_subsys_state。cg_cgroup_link收集不同层级的springmybatis源码深度解析cgroup和css_set,通过该结构可以找到与之关联的进程。
了解了这些概念后,可以进一步探索cgroup内部用于结构转换的函数,如task_subsys_state、find_existing_css_set等,这些函数帮助理解cgroup的内部运作。此外,cgroup_init_early和cgroup_init函数是初始化cgroup的关键步骤,它们负责初始化rootnode和子系统的数组,为cgroup的使用做准备。
最后,需要明确Linux内一切皆文件,cgroup基于VFS实现。内核启动时进行初始化,以确保系统能够正确管理进程资源。cgroup的初始化过程分为早期初始化和常规初始化,其中早期初始化用于准备cpuset和CPU子系统,确保它们在系统运行时能够正常工作。通过这些步骤,我们可以深入理解cgroup如何在Linux内核中实现资源管理和进程控制。
å¦ä½å¦ä¹ Docker
å¦ä½å¦ä¹ Docker
对äºå¨æ ¡å¦çèè¨ï¼åºè¯¥å¦ä½å»å¦ä¹ dockerï¼æ¯ç«å¦æ ¡æ²¡æå ·ä½çåºç¨éæ±ä½ä¸ºå¼å¯¼ï¼æ以åºè¯¥å¦ä½å»ç 究Dockerï¼è¿æï¼Dockerçæºä»£ç æ没æå¿ è¦å»ç 究ï¼
é¦å æ说æä¸ï¼ææ¯ä¸ä½å¨æµæ±å¤§å¦VLISå®éªå®¤äºè®¡ç®é¡¹ç®ç»çå¦çï¼ä½¿ç¨è¿Dockerï¼ç 究è¿Dockeråå ¶æºç ï¼ä¹å®å¶è¿Dockerã
对äºå¦çå¦ä½å¦ä¹ Dockerï¼æ认为é¦å è¦çä¸ä¸å¦ç个人çç¥è¯èæ¯ãè½å©ç¨çèµæºèµæºã以åä¸ªäººå ´è¶£ååå±æ¹åã
1.å¦ä¹ Dockerï¼å¦æ没æäºè®¡ç®çåºæ¬ç¥è¯ï¼ä»¥åå æ ¸çåºæ¬ç¥è¯ï¼é£ä¹å¦ä¹ 并ç解起æ¥ä¼ç¨ååãä½ä¸ºå®¹å¨ï¼Docker容å¨çä¼å¿å¨åªï¼ä¸è¶³å¨åªï¼æ好äºè§£å®¹å¨çå®ç°æ¯ææ ·çï¼ç®åäºè§£ï¼ï¼æ¥æéå管çï¼Dockerå该å¦ä½ä½ç°è½¯ä»¶å¼åï¼éæï¼é¨ç½²ï¼åå¸ï¼åè¿ä»£ç软件çå½å¨æ管çä¼å¿ã以ä¸ä¸¤ç¹æ认为æä¸ºå ³é®ï¼æè¿ä¸¤æ¹é¢ç认è¯å¿å¿ ä¼å¯¹ä¹åçå·¥ä½å¸®å©å·¨å¤§ã
2.å ³äºå¦ä¹ èµæºï¼èµ·ç ç硬件设æ½æ»æ¯è¦æçãDockeråå ¶çæçåå±å¾å¿«ï¼ä¸ä½¿ç¨çº¯ç论è¯å®æ¶æçå¾®ãå¦å¤ï¼èµæºè¿å æ¬Dockerå®æ¹ï¼å大çµååªä½å¹³å°ï¼ææ¯è®ºåï¼å¼æºç¤¾åºçï¼å¾å¾å¤§æ¿çè§ç¹è½ç¹ç ´èªå·±çå°æï¼æè 让èªå·±ç¥éåªæ¹é¢ç认è¯è¿å¾æ¬ 缺ï¼ä»¥å让èªå·±å°èµ°å¾å¤ç弯路ã
3.ä¸ªäººå ´è¶£çè¯ï¼å½ç»ä¸ºå¼ºæççä¸çãèµ·ç åºè¯¥è®¤åDockerç设计价å¼ï¼ä»¥åDockerçæªæ¥æ½åï¼å½ç¶æä¾æ®çæ¹å¤Docker并带å¨å¤§å®¶çæèï¼ä¹æ¯æ·±åå ³æ³¨ç表ç°ã
4.个人åå±æ¹åï¼æ认为å¦æéè¦æDockerå½ä½è½¯ä»¶çå½å¨æ管çå·¥å ·çè¯ï¼é£ç¨å¥½Dockeræ为éè¦ï¼APIåå½ä»¤çç解ä¸ä½¿ç¨æ¯å¿ éçãå¦æä¸æ³¨ç³»ç»è®¾è®¡æ¹é¢ï¼é£ä¹é¤Docker以ä¸çç¥è¯ä¸ç»éªä¹å¤ï¼è¥æDockeræºç çå¦ä¹ ä¸ç解ï¼é£ä¹è¿äºè¯å®ä¼è®©ä½ çDockeræ°´å¹³æé«ä¸ä¸ªå±æ¬¡ã
-- 8 0
xds
å¦ä¹ Dockerï¼æ大ç好å¤æ¯è·è¿æ°ææ¯åå±æ¹åãæè§å¾å¨æ ¡çåºè¯¥æ²¡æå¤å°ç¡¬æ§éæ±å¨Dockerçç 究ä¸ï¼è¿ä¹æ¯ä¸ºä»ä¹å¦æ ¡æ²¡åå ·ä½åºç¨è¦æ±çåå ãæå®é çåæ³æ¯çä¸äºDocker使ç¨æ¡ä¾ï¼èªå·±å®è·µåºä¸äºç»éªåºè¯¥ä¼å以åç社ä¼å®è·µä¸èµ·å°ä½ç¨ã
ç 究dockerçæºä»£ç ï¼åºè¯¥å°ä½ ä¸å®å³å¿ä»äºäºè®¡ç®æ¹é¢çäºä¸æè ç 究ï¼é£ä¹ä½ å°±éè¦ä»¥ç 究è ç身份å»åä»ç»çæºç åæçå·¥ä½ã
-- 3 0
ååGTDer
æä½ä¸ºåå å·¥ä½çè¿æ¥äººæ¥è¯´ï¼æ认为åªæä½ çæ£åå å·¥ä½åï¼å¨å·¥ä½ä¸å¦ä¹ è·ææä¹ï¼æ¯ç«Dockerç¥è¯äºè®¡ç®å ¶ä¸çä¸ä¸ªè½¯ä»¶å¹³å°èå·²ï¼è¯´ä¸æ¥çä½ æ¯ä¸äºï¼æ°çææ¯åºç°Dockerä¸ä¸å®æ¯å¯ä¸éæ©ã
ä½ä¸ºå¦çäºè§£æ°ææ¯ç¡®å®æ å¯åéï¼ä¸å®è¦è½æç论转å为ç产åææ¯æ£éã
-- 3 0
9lives - ç±çæ´»ï¼ç±äºè®¡ç®ã
å¦ä¹ ä»»ä½ä¸ä¸ªå¼æºæ°ææ¯ï¼é¦å é®èªå·±å 个é®é¢ï¼
1. 为ä»è¦å¦ä¹ å®ï¼
2. å¦ä¹ å®éè¦äºè§£åªäºç¸å ³ç¥è¯ç¹ï¼
3. å¦ä½å¿«éå¦ä¹ ï¼
4. 该ææ¯ç使ç¨åºæ¯æ¯ä»ä¹ï¼
æ¿æ个人çå¦ä¹ ç»éªæ¥ä¸¾ä¾ï¼æ¬äººä¹åæ¯è¾äºè§£OpenStackï¼
为ä»è¦å¦ä¹ dockerï¼
åçï¼
dockeræ¯è½»é级èæåææ¯ï¼docker使linux容å¨ææ¯çåºç¨æ´å ç®ååæ åå
dockerçé度å¾å¿«,容å¨å¯å¨æ¶æ¯«ç§çº§ç
dockerå°å¼ååè¿ç»´èè´£åæ¸
docker解å³äºä¾èµå°ç±é®é¢
dockeræ¯æå ä¹æææä½ç³»ç»
dockeræçé£éåå±ççæå
å¾å¤IT巨头éæ¸å å ¥åæ¯æ
å¦ä¹ å®éè¦äºè§£åªäºç¸å ³ç¥è¯ç¹ï¼
åçï¼
äºè®¡ç®æ¦å¿µç¸å ³ï¼restapi, å¾®æå¡ï¼OpenStackï¼
Linux ç³»ç»ç®¡çï¼è½¯ä»¶å 管çï¼ç¨æ·ç®¡çï¼è¿ç¨ç®¡ççï¼
Linux å æ ¸ç¸å ³ï¼Cgroup, namespace çï¼
Linux æ件系ç»ååå¨ç¸å ³ï¼AUFSï¼BRFS,devicemapper çï¼
Linux ç½ç»ï¼ç½æ¡¥ï¼veth,iptablesçï¼
Linuxå®å ¨ç¸å ³ï¼Appmor,Selinux çï¼
Linuxè¿ç¨ç®¡çï¼Supervisord,Systemd etc)
Linux容å¨ææ¯ï¼LXCçï¼
å¼åè¯è¨ï¼Python, GO,Shell çï¼
3.å¦ä½å¿«éå¦ä¹ ï¼
åçï¼ä¸ªäººä½ä¼æ好æä¸ä¸ªå®é çéæ±æ项ç®æ¥è¾¹å®è·µè¾¹å¦ä¹ ï¼å ¥é¨å¯ä»¥åèï¼ç¬¬ä¸æ¬docker书ï¼åçä¸éï¼é常éåå ¥é¨ãé¤æ¤ä¹å¤ï¼é 读ç人çblogæ¯å¦å®æ¹blog /
BTW: ç读dockerææ¡£
-- 0 0
tuxknight
楼ä¸åä½è¯´çé½å¾å¥½ï¼æåè¡¥å ä¸ç¹ï¼
æ¾ä»½ç¸å ³çå®ä¹ å·¥ä½
-- 0 0
lancer
å·¥ä½åç 究æ¯ä¸¤ä¸ªæ¹åæ个人认为ï¼å·¥ä½éè¦éè¿ä½ çå®é æè½ä¸ºä¼ä¸å¸¦æ¥ç»æµæçï¼èç 究çè¯å¯ä»¥ä¸æ³¨æ个ç¹ãä½æ¯ç 究离ä¸å¼å·¥ä½ï¼å 为工ä½å¯ä»¥è®©ä½ æ´å¥½ççä¼ææ¯å¸¦æ¥çä»·å¼ï¼ä»¥åå¦ä½æä¾æ´å¥½çæå¡ï¼ç¨æ·ä½¿ç¨åºæ¯éè¦é£äºææ¯ççªç ´ãæäºè¿äºè®¤è¯ï¼ç¶åæ´å ä¸æ³¨çç 究æ个ææ¯ç¹ï¼è¿æ ·æ许å¯ä»¥è¯´ææ¯ååä¸æ¯åä¸å¼çã
-- 0 0
绿åè²å½±
dockerç°å¨ååç«çï¼å¼å¾å¦ä¹ ä¸ä¸ã
一文图解|cgroup 设计分析(Docker底层技术)
cgroup,全称控制组,是擒妖指标源码用于限制进程组对某种资源使用的一种技术。对后端程序员而言,Docker已成为必须掌握的技术之一,而cgroup正是Docker底层的重要支撑。
cgroup通过将进程组织成控制组,并通过资源控制子系统对这些控制组进行资源限制。资源控制子系统包括内存、CPU、I/O和网络等。控制组内部的进程只能使用分配给控制组的资源限制。
具体来说,cgroup框架负责控制组的创建和管理,而资源控制子系统负责限制控制组内的资源使用。cgroup通过虚拟文件系统来管理进程控制组,这样可以方便地添加或移除进程。每个控制组都是目录树的一部分,层级关系便于组织和管理。
控制组内部的资源使用通过cgroup_subsys_state结构进行统计。在Linux内核中,每个资源控制子系统与控制组绑定,为控制组提供资源限制功能。当进程被添加到控制组时,内核会自动将该进程与控制组关联的所有资源统计对象关联,以实现资源使用限制。
cgroup的设计复杂度源于其需要控制多种资源,并通过虚拟文件系统管理控制组。cgroup源码实现复杂,涉及多个概念和文件系统。设计者通过类比内存管理的简单计数器来直观解释cgroup的原理。然而,cgroup在Linux内核中的实现远比这个示例复杂。
简而言之,cgroup通过控制组的概念和资源控制子系统,为Docker等容器管理技术提供了资源限制的基础。理解cgroup的设计与实现,对于深入掌握容器技术至关重要。
dockerådockeråºç¨ç¨åºçåºå«
å¦æä½ æ¯æ°æ®ä¸å¿æäºè®¡ç®ITååç人ï¼è¿ä¸å¹´å¤æ¥åºè¯¥ä¸ç´å¨å¬å°æ®éç容å¨ãå°¤å ¶æ¯Dockerï¼å ³äºå®ä»¬çæ°é»ä»æªé´æè¿ãDocker1.0å¨ä»å¹´6æåå¸åï¼å£°å¿æ´æ¯è¾¾å°äºåææªæçç¨åº¦ã
å¨éä¹æ以è¿ä¹å¤§ï¼å°±æ¯å 为许å¤å ¬å¸å¨ä»¥æ人çé度éç¨Dockerãå¨ä»å¹´7æçå¼æºå¤§ä¼ï¼OSConï¼ä¸ï¼æéå°äºæ©å·²å°æå¡å¨åºç¨ç¨åºä»èææºï¼VMï¼è½¬ç§»å°å®¹å¨çæ æ°ä¼ä¸ãçç¡®ï¼Dockerå ¬å¸ä¸»ç®¡æå¡åæ¯æçå¯æ»è£James Turnbullå¨ä¼ä¸åè¯æï¼å ¶ä¸æä¸å®¶å¤§é¶è¡ä¸ç´å¨ä½¿ç¨Dockerçæµè¯çï¼ç°å·²å¨ç产ç¯å¢ä¸ä½¿ç¨Dockerã对任ä½æ©æææ¯æ¥è¯´ï¼è¿æ çæ¯æ大çå 满èªä¿¡ç举å¨ï¼è¦ç¥éå®å¨å®å ¨è³ä¸çéèçå ä¹é»ææªé»ã
ä¸æ¤åæ¶ï¼Dockerè¿é¡¹å¼æºææ¯ä¸ä» ä» æ¯çº¢å¸½åCanonicalçLinux巨头ç¼éçå® å¿ã微软çä¸æè½¯ä»¶å ¬å¸ä¹å¨ççæ¥æ±Dockerã
é£ä¹ï¼ä¸ºä»ä¹å¤§å®¶é½è¿½æ§å®¹å¨åDockerå¢ï¼James Bottomleyæ¯Parallelså ¬å¸çæå¡å¨èæåé¦å¸ææ¯å®ï¼ä¹æ¯ä¸ä½ç¥åçLinuxå æ ¸å¼å人åãä»åæ解éï¼Hyper-VãKVMåXençèææºç®¡çç¨åºé½âåºäºèæå硬件仿çæºå¶ãè¿æå³çï¼å®ä»¬å¯¹ç³»ç»è¦æ±å¾é«ãâ
ç¶èï¼å®¹å¨å´ä½¿ç¨å ±äº«çæä½ç³»ç»ãè¿æå³çå®ä»¬å¨ä½¿ç¨ç³»ç»èµæºæ¹é¢æ¯èææºç®¡çç¨åºè¦é«æå¾å¤ã容å¨ä¸æ¯å¯¹ç¡¬ä»¶è¿è¡èæåå¤çï¼èæ¯é©»çå¨ååä¸ä¸ªLinuxå®ä¾ä¸ãè¿åè¿æ¥æå³çï¼ä½ å¯ä»¥â丢å¼æ²¡æç¨ç.9%çèææºåå¾ï¼å©ä¸ä¸ä¸ªå°å·§ç®æ´çè¶åå¼å®¹å¨ï¼éé¢å«æä½ çåºç¨ç¨åºï¼âBottomleyå¦æ¯è¯´ã
æ®Bottomley声称ï¼å æ¤ï¼åå©ç»è¿å ¨é¢è°ä¼ç容å¨ç³»ç»ï¼ä½ å°±å¯ä»¥å¨åä¸ç¡¬ä»¶ä¸æ¥ææ°éæ¯ä½¿ç¨XenèææºæKVMèææºå¤åºåå°å åçæå¡å¨åºç¨å®ä¾ã
æ¯ä¸æ¯è§å¾å¬èµ·æ¥å¾ä¸éï¼æ¯ç«ï¼ä½ å¯ä»¥è®©æå¡å¨è¿è¡å¤å¾å¤çåºç¨ç¨åºãé£ä¹ï¼ä¸ºä»ä¹ä¹å没æ人åè¿å¢ï¼å®é ä¸ï¼ä¹åæ人åè¿ã容å¨å ¶å®æ¯ä¸ªæ§æ¦å¿µã
容å¨å¯ä»¥è¿½æº¯å°è³å°å¹´åFreeBSD Jailsãç²éª¨æSolarisä¹æä¸ä¸ªç±»ä¼¼æ¦å¿µï¼å为Zonesï¼Parallelsãè°·æåDockerçå ¬å¸ä¸ç´å¨è´åäºç å诸å¦OpenVZåLXCï¼Linux容å¨ï¼ä¹ç±»çå¼æºé¡¹ç®ï¼æ¨å¨è®©å®¹å¨è¿è¡èµ·æ¥é¡ºç åå®å ¨ã
çç¡®ï¼å¾å°æ人ç¥é容å¨ï¼ä½å¤§å¤æ°äººå¤å¹´æ¥ä¸ç´å¨ä½¿ç¨å®¹å¨ãè°·æå°±æèªå·±çå¼æºå®¹å¨ææ¯lmctfyï¼Let Me Contain That For Youï¼æ为â让æå®¹çº³ä½ çç¨åºâï¼ãåªè¦ä½ 使ç¨è°·æçæ项åè½ï¼æ¯å¦æç´¢ãGmailãGoogle Docksææ è®ºå ¶ä»ä»ä¹ï¼å°±åé äºä¸ä¸ªæ°ç容å¨ã
ç¶èï¼Docker建ç«å¨LXCçåºç¡ä¸ãä¸ä»»ä½å®¹å¨ææ¯ä¸æ ·ï¼å°±è¯¥ç¨åºèè¨ï¼å®æèªå·±çæ件系ç»ãåå¨ç³»ç»ãå¤çå¨åå åçé¨ä»¶ã容å¨ä¸èææºä¹é´çåºå«ä¸»è¦å¨äºï¼èææºç®¡çç¨åºå¯¹æ´ä¸ªè®¾å¤è¿è¡æ½è±¡å¤çï¼è容å¨åªæ¯å¯¹æä½ç³»ç»å æ ¸è¿è¡æ½è±¡å¤çã
è¿åè¿æ¥æå³çï¼èææºç®¡çç¨åºè½å容å¨åä¸äºçä¸ä»¶äºå°±æ¯ï¼ä½¿ç¨ä¸åçæä½ç³»ç»æå æ ¸ãæ以ï¼ä¸¾ä¾è¯´ï¼ä½ å¯ä»¥ä½¿ç¨å¾®è½¯Azureï¼åæ¶è¿è¡Windows Serverçå®ä¾åSUSE Linuxä¼ä¸çº§æå¡å¨çå®ä¾ãè³äºDockerï¼ææ容å¨é½å¿ 须使ç¨åæ ·çæä½ç³»ç»åå æ ¸ã
å¦ä¸æ¹é¢ï¼å¦æä½ åªæ¯æ³è®©å°½å¯è½å¤çæå¡å¨åºç¨å®ä¾å¨å°½å¯è½å°ç硬件ä¸è¿è¡ï¼å¯è½ä¸å¤§å ³å¿è¿è¡å¤ä¸ªæä½ç³»ç»èææºãè¦æ¯åä¸åºç¨ç¨åºçå¤ä¸ªå¯æ¬æ£æ¯ä½ éè¦çï¼é£ä¹ä½ ä¼å欢ä¸å®¹å¨ã
æ¹ç¨Dockerè¿ä¸ä¸¾æªæææ¯å¹´ä¸ºæ°æ®ä¸å¿æäºè®¡ç®æå¡æä¾åèçæ°åä¸ç¾å ççµåå硬件ææ¬ãæ以é¾æªå®ä»¬å¨ä¸çªèå°å°½å¿«éç¨Dockerã
Docker带æ¥äºä¹åææ¯æ没æçå 个æ°ç¹ç¹ã第ä¸æ¯ï¼ä¸ä¹åçæ¹æ³ç¸æ¯ï¼Docker让容å¨é¨ç½²å使ç¨èµ·æ¥æ´å®¹æãæ´å®å ¨ãæ¤å¤ï¼ç±äºDockerä¸å ¶ä»å®¹å¨é¢åçå·¨æè¿è¡äºåä½ï¼å æ¬Canonicalãè°·æã红帽åParallelsï¼å ±åå¼åå ¶å ³é®çå¼æºç»ä»¶libcontainerï¼å®ä¸ºå®¹å¨å¸¦æ¥äºè¿«åéè¦çæ ååã
ä¸æ¤åæ¶ï¼å¹¿å¤§å¼å人åå¯ä»¥ä½¿ç¨Dockerå°è£ ã交ä»åè¿è¡ä»»ä½åºç¨ç¨åºï¼åºç¨ç¨åºæ为轻åçãå¯ç§»æ¤çãèªç»èªè¶³çLXC容å¨ï¼å¯ä»¥å¨ä»»ä½å°æ¹è¿è¡ãæ£å¦Bottomleyåè¯æï¼â容å¨è®©ä½ ç«å³äº«æåºç¨ç¨åºå¯ç§»æ¤æ§ãâ
å¸åºç ç©¶å ¬å¸ Researchçèµæ·±åæå¸Jay Lymanè¡¥å éï¼âä¼ä¸ç»ç»åæ±ä»¥ä¸ç§é«æãæ ååãå¯éå¤çæ¹å¼ï¼è®©åºç¨ç¨åºåå·¥ä½è´è½½æ´æäºç§»æ¤åååï¼èææ¶å¾é¾åå°è¿ç¹ãæ£å¦GitHubéè¿å ±äº«æºä»£ç æ¥ä¿è¿åä½ååæ°é£æ ·ï¼Docker HubãOfficial Reposååä¸æ¯æä¹å¨å¸®å©ä¼å¤ä¼ä¸éè¿æ¹è¿å°è£ ãé¨ç½²å管çåºç¨ç¨åºçæ¹å¼ï¼åºå¯¹è¿ä¸ªé¾é¢ãâ
æåä½å¹¶éæä¸éè¦çï¼Docker容å¨æäºé¨ç½²å°äºç«¯ãæ£å¦Ben Lloyd Pearsonå¨opensource.comä¸åéï¼âDockeréç¨äºä¸ç§ç¹å«çæ¹å¼ï¼ä»¥ä¾¿å¯ä»¥æ´åå°å¤§å¤æ°DevOpsï¼å¼åè¿è¥ï¼åºç¨ç¨åºå½ä¸ï¼å æ¬PuppetãChefãVagrantåAnsibleï¼æè å¯ä»¥ç¬èªä½¿ç¨ï¼ä»¥ç®¡çå¼åç¯å¢ã主è¦åç¹æ¯ï¼å®ç®åäºé常ç±å¦å¤è¿äºåºç¨ç¨åºæ§è¡ç好å¤ä»»å¡ãå ·ä½æ¥è¯´ï¼æäºDockerï¼äººä»¬å°±å¯ä»¥æ建ä¸æ´»å¨æå¡å¨ä¸æ¨¡ä¸æ ·çæ¬å°å¼åç¯å¢ï¼ä»åä¸ä¸ªä¸»æºè¿è¡å¤ä¸ªå¼åç¯å¢ï¼æ¯ä¸ªå¼åç¯å¢æç¬ç¹ç软件ãæä½ç³»ç»åé ç½®ï¼ï¼å¨æ°çæä¸åçæå¡å¨ä¸æµè¯é¡¹ç®ï¼ä»¥å让任ä½äººé½å¯ä»¥å¨è®¾ç½®ä¸æ¨¡ä¸æ ·çæ åµä¸å¤çåä¸é¡¹ç®ï¼æ 论æ¬å°ä¸»æºç¯å¢ææ ·ãâ
ç®èè¨ä¹ï¼Dockerè½ä¸ºä½ åçäºæ å°±æ¯ï¼ç¸æ¯å ¶ä»ææ¯ï¼å®è½è®©æ´å¤æ°éçåºç¨ç¨åºå¨åä¸ç¡¬ä»¶ä¸è¿è¡ï¼å®è®©å¼å人åæäºå¿«éæ建å¯éæ¶è¿è¡ç容å¨ååºç¨ç¨åºï¼å®å¤§å¤§ç®åäºç®¡çåé¨ç½²åºç¨ç¨åºçä»»å¡ãæ»èè¨ä¹ï¼æè½ç解ä½ä¸ºä¸é¡¹ä¼ä¸çº§ææ¯ï¼Docker为ä½ä¸ä¸å蹿红ãæåªæ¯å¸æå®ä¸è´ä¼æï¼å¦åå¤å¤´ä¼æä¸äºå¿§å¿å¿¡å¿¡çCEOåCIOã
dify+ollama构建本地大模型平台
Dify是一个开源的LLM应用开发平台,提供直观的界面和强大的功能,包括AI工作流、RAG管道、Agent、模型管理和可观测性,旨在帮助用户从原型到生产流程快速搭建。您可以在GitHub上找到Dify的代码库。 核心功能包括: 工作流:在画布上构建和测试功能强大的AI工作流程,利用所有集成功能。 全面的模型支持:无缝集成数百种专有/开源LLMs及数十种推理提供商和自托管解决方案,覆盖GPT、Mistral、Llama3等。 Prompt IDE:直观界面用于制作提示、比较模型性能及为聊天应用添加文本转语音等额外功能。 RAG Pipeline:广泛支持从文档摄入到检索,提供PDF、PPT等常见文档格式的文本提取。 Agent智能体:基于LLM函数调用或ReAct定义创建,提供超过种内置工具,如谷歌搜索、DELL·E、Stable Diffusion和WolframAlpha。 LLMOps:跟踪和分析应用程序日志与性能,持续改进提示、数据集和模型。 后端即服务:Dify所有功能都带有API,方便集成到您的业务流程中。 OLLAMA是一个LLM加速服务化应用,主要用于模型服务,作者通过一系列文章详细介绍了其部署、使用过程以及与CodeGPT结合的案例。OLLAMA支持Mistral-7B、Gemma-7B等模型。 部署DIFY步骤如下: 克隆DIFY源代码至本地。 使用一键启动命令启动DIFY容器。 访问本地DIFY服务,根据需要调整配置。 在DIFY中设置模型供应商时,确保输入OLLAMA宿主机地址(http://host.docker.internal:)以完成集成。 应用部署包括: 构建聊天应用。 构建知识库应用,配置嵌入模型并导入文件。 利用模板快速构建知识库应用。 整体来说,DIFY和OLLAMA提供了从模型集成到应用构建的完整解决方案,简化了本地大模型平台的搭建过程。线上环境OOM频发,MyBatis有坑...
线上服务频繁遭遇 OutOfMemoryError(OOM)问题,对业务造成了严重影响,一天内服务重启多达五次,导致整个系统几乎瘫痪。通过Skywalking追踪,发现链路调用大部分呈现红色,亟待解决。作为排查者,我接手了这个任务。
首先,我分析了OOM的常见原因,主要包括堆内存和元空间不足。在我们的案例中,Mybatis的问题浮出水面。源码分析显示,Mybatis在拼接SQL时,通过集合存储SQL和参数,当SQL参数过多导致SQL过长时,集合会变得庞大,回收不及时就会引发内存溢出。
由于环境限制,无法直接通过jstack、jmap工具定位问题,这增加了排查的难度。但在网络搜索中,我找到了一篇与DruidDataSource和Mybatis相关的问题,这让我找到了问题的线索,即多线程并发操作可能导致内存占用过高,从而触发OOM。
进一步的源码分析揭示,DynamicContext类中的ContextMap(继承自HashMap)在存储SQL参数和占位符时,存在无法被GC回收的问题。当并发查询量增加时,这可能导致内存溢出。我通过线上复现情景,验证了这一理论,发现服务频繁进行Full GC,最终引发了OOM。
针对问题,我提出解决方案:优化SQL拼接,避免过长的SQL体积,强调代码和SQL编写的重要性。同时,为了应对未来可能的故障,我配置了docker中的OOM保留dump文件,以备不时之需。
2024-11-15 00:58
2024-11-15 00:21
2024-11-14 23:45
2024-11-14 22:45
2024-11-14 22:38