jip和btrace分别是怎么暴露进程数据的?

jip 和 btrace 是两个著名的开源工具,它们都可以察看另一个jvm进程的信息:jip的客户进程可以打印另一个进程中每个方法的执行时间,btrace则可以直接查看甚至改变变量的值。 两个工具可以做的事都直接依赖java instrument api。通过这个api在目标进程运行时修改字节码,在一定程度上改变代码的执行:jip让目标进程给出执行时间,btrace让目标进程给出变量的值。 jip和btrace在执行时都有自己的进程。它们自己的进程接收目标进程释放的信息,然后展现出来。 现在的问题是,工具自己的进程是怎么样跟目标进程通信的? 经研究发现:   1. jip进程与目标进程是通过原生的socket进行通信的。目标进程在启动时须使用-javaagent jip-xxx.jar这个jvm参数(java instrument的“Command-Line Interface”)立即进行字节码instrument操作。具体的操作中包含一步:启动一个ServerSocket. jip进程启动后再访问这个ServerSocket.   2. btrace进程与目标进程则是通过java attach api进行通信的。通过指定一个进程号,btrace进程可以拿到目标进程的句柄。这个句柄是VirtualMachine类的实例,而这个类有一个方法叫loadAgent(),通过这个方法,btrace进程再把预先准备好的agent注入到目标进程实现字节码的动态修改(java instrument的"Starting Agents After VM Startup"模式) 优劣性比较   假设目标进程是java web应用,两者的优劣点可以从多个方面来比较。     1. 运行时的侵入性:btrace优于jip. jip需要在启动目标进程时就使用-javaagent参数,这可能导致贵公司服务器的启动脚本的改动。你们的运维人员未必愿意帮忙。     2. 能否instrument远程的进程:jip优于btrace,因为btrace所基于的java attach api只能捆绑本机的进程,而jip基于的socket没有这个限制。     3. 实现的简易性:btrace优于jip. 使用现成的attach api,当然比手工实现一套基于socket的c/s模型要省事。     4. 平台无关性: jip胜出,因为btrace基于的attach api有两大制约:        a. java6 以后才有这个api        …

jip和btrace分别是怎么暴露进程数据的? Read More »

PMBOK 学习笔记 3.7 项目风险管理

项目风险管理    风险源于不确定性。   风险管理的基本步骤: 识别风险 => 分析风险 => 规划应对方案 第0步: 制定风险管理计划,即 为整个风险管理制定方法论。包括:       a.风险概率的定义:如规定“发生概率超过70%的风险为高可能性风险”       b.风险影响的定义:如规定“二级风险指使进度拖延10%-20%的风险”       c.风险管理活动将占用的时间和资金 第1步: 识别风险       a.项目成员应该参与识别过程,这样可以提高大家的责任感      b.进行识别时可以对照以前项目总结出来的风险checklist       c. 识别出的风险应成文归档,放在“风险登记册”中       d.项目进展过程中可能冒出新的风险,因此“识别风险”是一个持续的过程 第2步: 实施定性风险分析: 分析出风险的发生概率和影响,并排定风险的优先级 第3步: 实施定量风险分析(没看懂,略过)    第4步: 规划风险应对     a.规避风险:如延长进度,缩小范围,使风险消失     b.转移风险:把属于自己的风险转移到别人头上,如让甲方为超支的预算买单。     c.减轻风险:降低风险发生的概率(比如测试做得好一点),或者减少它的影响(比如增加备机)     d.接受风险:付出风险发生的代价,或者准备好B计划 第N/A步: 监控风险      跟踪已识别风险,监测残余风险,识别新风险。这是一个持续进行的过程

PMBOK 学习笔记 3.6 项目沟通管理

项目沟通管理    项目经理的大多数时间都用在与团队成员和其他干系人的沟通上,他要起到桥梁的作用。  相关的过程:        1. 识别干系人            a.应在项目早期就识别出干系人         b.可以用四象限(权力+利益)给干系人分类,然后制定应对的策略。比如有的要”令其满意”,有的则要“随时告知”            c.干系人管理的相关文档可能会比较敏感,要注意保密        2. 规划沟通: 确定“如何沟通”            a.应在项目早期制定出沟通管理计划,并让项目成员确认         b.计划的沟通方式要“有效”:发送方有责任发送清晰完整的信息,接收完有责任确认和理解信息            c.沟通管理计划中可以规定:沟通的渠道、频率、接口人等                       3. 发布信息     要发布的信息包括:项目状态,重要记录,干系人的反馈意见和经验教训        4. 管理干系人期望             a.管理好干系人的期望可以增加项目成功的概率             b.项目经理要建立信任、学会倾听             c.项目经理也要克服自己对变化的抗拒心理        5. 报告绩效             a.目的:了解进展与绩效情况,并预测项目结果             b. 可以应用偏差分析技术,通过将实际信息与项目基准进行比较来确定偏差             c.报告内容可以有:完成百分比,绩效、风险分析,本期工作,下期工作             d.绩效报告应该定期发布

关于专利的一些知识

0. 专利:技术公开,使用垄断 1. 专利有发明专利(技术创新),实用型专利(技术方案,针对产品形状和构造)和产品外观专利(美工设计)。 软件UI在中国不能申请专利,但在美国可以。 2.申请专利要满足 新颖性、创造性(太显而易见也不行)和实用性 3.科学发现不能申请专利,“一种新的扑克游戏规则”也不能申请专利 4.专利有地域性,在美国申请了专利,在中国仍是无效的。现在各国有一个协议,在一国申请即等同在各国申请,但各国的审批是独立的,美国批准了,中国未必批准。 5.知识产权除了专利,还有著作权(版权)、商标、域名等。值得一提的是,并没有一种知识产权可以保护新的商业模式,所以互联网抄来抄去是合法的。

PMBOK 学习笔记 3.5 项目人力资源管理

项目人力资源管理:制定计划 => 组建团队 => 建设,管理团队 1. 制定人力资源计划:确定角色,明确职责,并配备管理计划  a.要确保大家都清楚自己的角色和职责  b.可通过人际交往了解政治与人际因素 2. 组建项目团队    a.项目经理要有效谈判,并影响那些能提供资源的人(比如职能经理)  b.主要输出:项目人员花名册 3. 建设管理团队:维护、激励和鼓舞团队,促进团队协作,使项目成功  a.提供挑战与机会    b.提供支持    c.认可与奖励优秀绩效。只有优良行为才能得到奖励    d.开放和有效的沟通, 建立信任    e.以建设性的方式管理冲突   f.鼓励合作  g. 创建富有生气的团队文化    h.项目经理要有 软技能:同情心,影响力,创造力和小组协调能力   i. 团队建设在整个项目周期都很重要,尤其是在前期    j.对可接受的行为作出明确规定  k.可考虑集中办公,增加集体感 4. 管理项目团队:观察团队行为, 管理冲突    a. 总是清楚当前的情况,包括成员的工作和态度,他们之间的人际关系问题等    b. 管理好冲突        i. 可先利用企业文化、良好的项目实践、工作规范等来预防冲突       ii. 开诚布公       iii.对事不对人       …

PMBOK 学习笔记 3.5 项目人力资源管理 Read More »

PMBOK 学习笔记 3.4 项目质量管理

PMI提出了3个过程:      1. 规划质量: 识别质量要求。主要输出有: 质量管理计划(说明项目将如何保障质量) 和 质量测试指标(如 响应时间、可靠性、测试覆盖度等)      2. 实施质量保证: 审计质量要求,审计质量测量结果, 审计质量过程      3. 实施质量控制:记录质量测量的结果,评估绩效           a. 主要手段有测试,抽样检查等           b. 主要输出:质量控制测量结果(如测试报告)

PMBOK 学习笔记 3.3 项目的范围,时间,成本管理

1. 范围管理:定义和控制哪些工作应包括在项目内,哪些不应包括在项目内。 具体过程有:    a. 收集需求。主要输出有“需求文档”和“ 需求管理计划”(规定如何分析、记录和管理需求)    b. 定义范围。主要输出有“项目范围说明书”    c. 创建WBS(工作分解结构)    d. 核实范围(Verify Scope),即验收。    e. 控制范围:监督范围状态、管理范围基线变更。 2. 时间管理,包括一系列与时间有关的规划和控制的过程。    规划:       a. 定义活动。把WBS的工作包再细分为“活动”,即任务。主要输出有活动清单,里程碑清单。       b. 排列活动顺序(Sequence Activities). 主要输出为PDM,项目进度网络图。       c. 估算活动资源。主要输出为“活动资源需求”,即每项活动所需的资源类型和数量。       d. 估算活动持续时间:先估算出工具量和计划的资源数量,再推算出所需的工作时段数。       e. 制定进度计划。输出应包括一个基线计划。     Note: 实践时,以上过程往往联系非常紧密,以至于可以视为一个过程    控制:        控制进度。主要手段是记录实际进度,比较它与进度计划基线的差异,然后决定是否需要采取措施。 3. 成本管理。有三个过程,     a. 估算成本     b. …

PMBOK 学习笔记 3.3 项目的范围,时间,成本管理 Read More »

javassist的一些注意事项

1. CtClass在toClass()或writeFile()之后会被冻结,冻结之后不可改动;如果要改,需要先通过ctClass.defrost()解冻 2. 当javassist的目标是servlet 容器里的app时,如何让ClassPool搜索web app里面的CtClass?  ClassLoader cl = Thread.currentThread().getContextClassLoader(); classPool.insertClassPath(new LoaderClassPath(cl)); 3.CtClass对象创建后会保存在ClassPool里以供后用,如果对象太多了就会导致内存问题。如果某个CtClass对象不需要再用了,你就应该显式地移除它:    a.ctClass.detach(),把ctClass从pool里移除    b.或者再执行一次 classPool = ClassPool.getDefault(),使原来的pool对象失去引用被gc掉,它里面的ctClass对象也会跟着gc掉 4.ctClass.getDeclaredMethod("hello")并不会去父类搜索hello方法