企业内部大部分服务器都只有内网,一般可以使用NAT方式正向代理访问公网资源。对于Linux来说一般通过ssh登录服务器,在没有公网IP的情况下可以修改ssh config配置文件,利用一台可以接入内网并具有公网IP的服务器作为代理或者称为Tunnel跳板机来管理,可以灵活定制访问规则并优化ssh参数让管理更加轻松。
2019年01月31日 - 初稿
阅读原文 - >
首先web开发分为前端开发与后端开发,前端开发就是设计开发网站前台的页面,也就是直接让用户浏览的网站页面,而后端开发就是让前端页面可以与web服务器进行交互,用户通过前端输入,服务端响应,而后端开发的工作主要是与数据交互调用打交道。
楼主是想从设计师转到web岗位,那么大多数都是转为web前端开发设计,由于设计师一般都懂的设计颜色的搭配,所以对于整个网页的设计布局肯定是没什么问题的,从设计转到web前端开发就是将web页面设计图转成HTML文件即可,当然HTML与css知识前端开发的基础,另外想要成为优秀的web前端开发设计人员,还需要学习JavaScript语言,之后学习jQuery,bootstrap等前端框架,最后还要学习ajax交互。而web后端开发就需要学习Java或者PHP等后端开发语言,以及相关的数据库设计开发。
所谓的高可用,也叫 HA(High Availability),是分布式系统架构设计中必须考虑的因素之一,它是保证系统SLA的重要指标。Redis 高可用的主要有三种模式: 主从模式 , 哨兵模式和集群模式 。
Redis 提供了 Redis 提供了复制(replication)功能,当一台 redis 数据库中的数据发生了变化,这个变化会被自动地同步到其他的 redis 机器上去。
Redis 多机器部署时,这些机器节点会被分成两类,一类是主节点(master 节点),一类是从节点(slave 节点)。一般 主节点可以进行读、写 *** 作 ,而 从节点只能进行读 *** 作 。一个主节点可以有多个从节点,但是一个从节点只会有一个主节点,也就是所谓的 一主多从结构 。
· 支持主从复制,主机会自动将数据同步到从机,可以进行读写分离;
· Master 是以非阻塞的方式为主 Slaves 提供服务。所以在 Master-Slave 同步期间,客户端仍然可以提交查询或修改请求;
· Slave 同样是以非阻塞的方式完成数据同步。在同步期间,如果有客户端提交查询请求,Redis 则返回同步之前的数据。
· Redis 不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的 IP 才能恢复;
· 主机宕机,宕机前有部分数据未能及时同步到从机,切换 IP 后面还会引入数据不一致的问题,降低了系统的可用性;
· Redis 较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂;
· Redis 的主节点和从节点中的数据是一样的,降低的内存的可用性
实际生产中,我们优先考虑哨兵模式。这种模式下,master 宕机,哨兵会自动选举 master 并将其他的 slave 指向新的 master。
在主从模式下,redis 同时提供了哨兵命令 redis-sentinel ,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵进程向所有的 redis 机器人发送命令,等待 Redis 服务器响应,从而监控运行的多个 Redis 实例。一般为了便于决策选举,使用 奇数个哨兵 。多个哨兵构成一个哨兵集群,哨兵直接也会相互通信,检查哨兵是否正常运行,同时发现 master 战机哨兵之间会进行决策选举新的 master
哨兵模式的作用:
· 通过发送命令,让 Redis 服务器返回监控其运行状态,包括主服务器和从服务器;
· 然而一个哨兵进程对 Redis 服务器进行监控,也可能会出现问题,为此,我们可以使用多个哨兵进行监控。各个哨兵之间还会进行监控,这样就形成了多种哨兵模式。
哨兵很像 kafka 集群中的 zookeeper 的功能。
· 哨兵模式是基于主从模式的,所有主从的优点,哨兵模式都具有。
· 主从可以自动切换,系统更健壮,可用性更高。
· 具有主从模式的缺点,每台机器上的数据是一样的,内存的可用性较低。
· Redis 较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。
Redis 集群模式本身没有使用一致性 hash 算法,而是使用 slots 插槽 。
Redis 哨兵模式基本已经可以实现高可用,读写分离 ,但是在这种模式下每台 Redis 服务器都存储相同的数据,很浪费内存,所以在 redis30 上加入了 Cluster 集群模式,实现了 Redis 的分布式存储,对数据进行分片,也就是说每台 Redis 节点上存储不同的内容;每个节点都会通过集群总线(cluster bus),与其他的节点进行通信。 通讯时使用特殊的端口号,即对外服务端口号加 10000。例如如果某个 node 的端口号是 6379,那么它与其它 nodes 通信的端口号是 16379。nodes 之间的通信采用特殊的二进制协议。
对客户端来说,整个 cluster 被看做是一个整体,客户端可以连接任意一个 node 进行 *** 作,就像 *** 作单一 Redis 实例一样, 当客户端 *** 作的时候 key 没有分配到该 node 上时,Redis 会返回转向指令,指向正确的 node,这有点儿像浏览器页面的 302 redirect 跳转。
根据官方推荐,集群部署至少要 3 台以上的 master 节点,最好使用 3 主 3 从六个节点的模式。
在 Redis 的每一个节点上,都有这么两个东西, 一个是插槽(slot),它的的取值范围是:0-16383, 可以从上面 redis-tribrb 执行的结果看到这 16383 个 slot 在三个 master 上的分布。还有一个就是 cluster,可以理解为是一个集群管理的插件,类似的哨兵。
当我们的存取的 Key 到达的时候,Redis 会根据 crc16 的算法对计算后得出一个结果,然后把结果和 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取 *** 作。
为了保证高可用, redis-cluster 集群引入了主从模式 ,一个主节点对应一个或者多个从节点。当其它主节点 ping 主节点 master 1 时,如果半数以上的主节点与 master 1 通信超时,那么认为 master 1 宕机了,就会启用 master 1 的从节点 slave 1,将 slave 1 变成主节点继续提供服务。
如果 master 1 和它的从节点 slave 1 都宕机了,整个集群就会进入 fail 状态,因为集群的 slot 映射不完整。 如果集群超过半数以上的 master 挂掉,无论是否有 slave,集群都会进入 fail 状态。
redis-cluster 采用去中心化的思想 ,没有中心节点的说法,客户端与 Redis 节点直连,不需要中间代理层,客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
对 redis 集群的扩容就是向集群中添加机器,缩容就是从集群中删除机器,并重新将 16383 个 slots 分配到集群中的节点上(数据迁移)。
扩缩容也是使用集群管理工具 redis-trirb。
扩容时,先使用 redis-trirb add-node 将新的机器加到集群中,这是新机器虽然已经在集群中了,但是没有分配 slots,依然是不起做用的。在使用 redis-trirb reshard 进行分片重哈希(数据迁移),将旧节点上的 slots 分配到新节点上后,新节点才能起作用。
缩容时,先要使用 redis-trirb reshard 移除的机器上的 slots,然后使用 redis-trirb add-del 移除机器。
采用去中心化思想,数据按照 slot 存储分布在多个节点,节点间数据共享,可动态调整数据分布;
可扩展性:可线性扩展到 1000 多个节点,节点可动态添加或删除;
高可用性:部分节点不可用时,集群仍可用。通过增加 Slave 做 standby 数据副本,能够实现故障自动 failover,节点之间通过 gossip 协议交换状态信息,用投票机制完成 Slave 到 Master 的角色提升;
降低运维成本,提高系统的扩展性和可用性。
1Redis Cluster 是无中心节点的集群架构,依靠 Goss 协议(谣言传播)协同自动化修复集群的状态。但 GosSIp 有消息延时和消息冗余的问题,在集群节点数量过多的时候,节点之间需要不断进行 PING/PANG 通讯,不必须要的流量占用了大量的网络资源。虽然 Reds40 对此进行了优化,但这个问题仍然存在。
2数据迁移问题
Redis Cluster 可以进行节点的动态扩容缩容,这一过程,在目前实现中,还处于半自动状态,需要人工介入。在扩缩容的时候,需要进行数据迁移。
而 Redis 为了保证迁移的一致性,迁移所有 *** 作都是同步 *** 作 ,执行迁移时,两端的 Redis 均会进入时长不等的阻塞状态,对于小 Key,该时间可以忽略不计,但如果一旦 Key 的内存使用过大,严重的时候会接触发集群内的故障转移,造成不必要的切换。
主从模式:master 节点挂掉后,需要手动指定新的 master,可用性不高,基本不用。
哨兵模式:master 节点挂掉后,哨兵进程会主动选举新的 master,可用性高,但是每个节点存储的数据是一样的,浪费内存空间。数据量不是很多,集群规模不是很大,需要自动容错容灾的时候使用。
集群模式:数据量比较大,QPS 要求较高的时候使用。 Redis Cluster 是 Redis 30 以后才正式推出,时间较晚,目前能证明在大规模生产环境下成功的案例还不是很多,需要时间检验。
用windows自带的远程桌面连接,是最好的方法具体 *** 作比较复杂需要设置客户端和服务器端相关教程:-----------------------------------------------
1你首先需要一个支持远程桌面功能windows系统,如windowsXP的专业版或windows2000的服务器以上的版本。当然如果你装个windows2003当然更好。相信微软以后出的windows版本都是支持远程桌面功能的。这部分的 *** 作相信懂得电脑基本的 *** 作的都可以实现的,windows的安装已经设计得很傻瓜了。
2系统装好了,跟着就是装ADSL,只要可以上网就可以。这部分我这里就不多说了,这个不会我真的就没话可说。
3接着就是要在你的电脑里装个可以实现动态域名解析功能的软件。这个步骤比较重要。也比较麻烦,为什么要装这个呢,说的简单一点就是让你的电脑拥有一个固定的IP,才能让你在其他任何地方都可以直接连到你的电脑,因为ADSL在每次连通所产生的IP都是不一样的。因为ADSL都是动态分配IP的。所以缺少这个就实现不了远程桌面了。动态域名解析的原理其实不需要我们理解,我们只要能利用它达到连接电脑就可以了,这里就不详说了。那要选择那个动态域名解析软件呢,我尝试几个类似的软件,试用以后我推荐大家使用名叫"花生壳"的动态域名解析软件,因为它是免费的,而且在中国来说它是最大和最稳定的动态域名解析提供商,选择它没有错。免费第一阿!安装和使用"花生壳"还需要一下的几小步骤:
31先要去"花生壳"所在的服务网站申请一个免费的护照,其实就是申请会员。成为会员后你的的账号和密码等会就有用了。"花生壳"服务网站是>
参考资料:
1 先下载所需要的安装程序:Git、msysgit、TortoiseGit(32bit,64bit)、Putty (以上均为官方下载链接,如担心有毒请自行Google);
2 顺序安装以上下载的程序(先关闭所有的窗口,360会报不安全,信任就好),基本就是一路Next了,这个没啥好说的;
3 注册一个Github帐号:>向日葵开机棒使用流程 步骤一:安装开机棒 插入电源适配器,给向日葵开机棒供电,并连接至路由 注意:观察状态指示灯显示是否正常,若指示灯未亮,请检查连接是否正常。 开机棒指示灯状态说明请参考官网帮助: 步骤二:如何配置 1、授权主机(需开机棒正常在线) 登录向日葵开机棒后台管理 选择已搜索的局域网主机,直接点击进行授权 如何授权主机请参考官网帮助: 2、配置IP地址(DHCP网络无需配置) 登录向日葵PC版主控端,点击在线开机棒属性 IP设置:根据网络环境,可以自动获得IP地址,也可以手动设置IP地址 如何配置网络请参考官网帮助: 步骤三:实现远程开机 在向日葵主控端选择有开机标识的离线主机直接点击 *** 作,即可实现一键式开机。
Linux服务器挖矿,只需要两步
打开 网站,输入手机号,选择你要使用多少CPU来挖矿,默认为使用50%的CPU进行挖矿,点击生成你的专属命令并复制
进入控制台粘贴命令,并点击运行
就是这么 *** 作简单。
BEA JRockit Java虚拟机(JVM)所带来的不仅仅是性能的提升 本文探讨了JRockit R 版本可用的一些管理和使用方面的特性 概述了JRockit Mission Control分析工具套件 JRockit Management Console的试验性headless模式以及使用Ctrl Break Handler JRCMD 堆视图和code coverage与JVM进行交互
简介JRockit JVM不只是快 它还和JRockit Mission Control一起 组成一套执行运行时分析和内存泄漏检测的分析工具 JRockit Management Console包含在JRockit JDK中 本文将探讨JRockit Management Console的一种试验性的headless模式 它可以用于与来自命令行的基于JRockitJMX的管理代理进行交互 Ctrl Break Handler提供了一种向JRockit发送各种高级命令的方法 甚至是在它启动后 这些命令甚至可以远程调用 我在后文中会提及 最后 我探讨了试验性的code coverage JRockit开箱即用地提供了该特性
关于BEA JRockit的更多信息 参见dev dev网站的JRockit Product Center
首先我将快速概述一下JRockit JVM可用的已确定的管理工具 然后我会转向缺少文档的试验性管理特性
JRockit Mission ControlJRockit R 版本引入了JRockit Mission Control工具套件 它包含的工具可以进行监控 管理 分析和消除Java应用程序内存泄漏 而不会引起通常与此类工具相关联的性能开销 Mission Control的低性能开销是因为使用了作为JRockit常规适应性动态调优的一部分而收集的数据 这还可以消除工具使用字节码装置修改系统执行特性时发生Heisenberg异常的问题 JRockit Mission Control功能可以根据需要随时可用 低性能开销也只在运行工具时有效 这些特征使得JRockit Mission Control成为专门用于生产中系统的工具
JRockit Mission Control中包含以下工具
JRockit Management ConsoleJRockit Management Console用于监控和管理多个JRockit实例 它捕获并显示关于垃圾收集器(GC)暂停 内存和CPU使用的实时数据 以及部署在JVM内部MBean服务器上的所有JMX MBean的信息 JVM管理包括对CPU相似性 垃圾收集策略和内存池大小的动态控制 JRockit Runtime AnalyzerJRockit Runtime Analyzer(JRA)是一个随需应变的 动态记录器 它生成关于JVM和正在运行的应用程序的详细记录 然后可以使用JRA应用程序对记录下来的配置文件进行离线分析 所记录的数据包括对方法和锁定的分析 还有垃圾收集统计信息 优化决策以及对象统计信息 JRockit Memory Leak DetectorJRockit Memory Leak Detector工具用来发现和查找内存泄漏原因 Memory Leak Detector的趋势分析器可以发现非常缓慢的泄漏 显示详细的堆统计信息(包括指向泄漏对象和分配位置的引用类型和实例) 并快速找出泄漏原因 Memory Leak Detector使用先进的图形化表现技术 以便更容易定位和理解有时比较复杂的信息关于JRockit Mission Control的更多信息 可以阅读文章An Introduction to JRockit Mission Control 或者访问dev dev网站的JRockit Mission Control
JRockit Management Console的Headless模式(试验性)
JRockit Management Console是监控JRockit运行的工具 它包括两部分 一个运行在JVM进程中的JMX代理 一个使用图形化用户界面的独立客户端(关于它以及其它方面的更详细的信息 请参见An Introduction to JRockit Mission Control) 其中 用户界面可以绘出部署在所连接的Java虚拟机中的任何MBean的数值属性的图形 图形密集的应用程序对资源的消耗可能会相当厉害 JRockit Management Console也不例外 可以引入text only(纯文本)模式 以便使用Management Console的通知功能和数据收集工具而不会导致整个GUI的开销
headless控制台引入了大量新的命令行参数 这同样适用于控制台的GUI版本 参数包括
参数 描述 headless 以headless模式启动控制台(不会加载与GUI相关的类) settings <settings file> 使用指定配置文舳H绻讷UI模式启动 并且该文件不存在 那么它将在关闭Management Console时创建 connectall 连接配置文件中所有可用连接(即原先使用GUI添加的) connect <connection > <connection > < > 使用GUI连接配置文件中可用的指定连接 autoconnect 自动连接到运行在启用JRockit发现协议(JRockit Discovery Protocol JDP)的管理服务器上的任何JRockit uptime <time in seconds> 将控制台运行一段指定的时间 然后自动关闭它 useraction <name> <delay in seconds> <period (optional)> 经过指定的时延后运行指定的用户动作 如果不指定period 动作将只执行一次 如果指定 动作将每过<period>秒就执行一次 version 打印Management Console的版本信息 并退出 locale <language> <country (optional)> 使用特定的地区启动控制台 比如 locale ja JP将以日语启动控制台(JRockit R 可用)
这里给出一个以headless模式启动Management Console的例子 读取指定配置文件 尝试连接所有已指定的JRockit 使用JRockit发现协议(JDP 下文讨论)积极查找新的JRockit 秒后将以每分钟一次的间隔向所有连接的JRockit发送Ctrl Break命令 一小时之后自动关闭 以前加入指定连接的所有通知规则(不管是通过使用GUI还是通过直接编辑配置文件添加的)将生效
java jar ManagementConsole jar headless settings C:\Headless\consolesettings xml connectall autoconnect uptime useraction ctrlbreak
用户动作是可以与JRockit Management Console上的一组连接进行交互的插件类 同样使用控制台配置文件来存储配置数据 用户动作显示在JRockit控制台图形用户界面的Plugins菜单下 headless模式中也可用 随控制台提供了两个默认用户动作 jrarecording用户动作 对连接的JRockit启动JRA记录 ctrlbreak用户动作 向连接的JRockit发送Ctrl Break命令(参见本文中关于Ctrl Break Handler和JRockit运行时分析器的小节) 要指定特定用户动作的参数 可以使用GUI进行配置 也可以编辑Management Console配置文件 后者可以在<user home>/ManagementConsole/ManagementConsole/consolesettings <version> xml文件中找到
编写自己的用户动作很容易 首先创建一个AbstractUserAction的子类 该示例演示了如何创建一个从所有连接的JRockit获取线程堆栈转储的用户动作
package example useractions; import java io IOException; import java util List; import nsole rjmx CommonRJMXNames; import nsole rjmx RJMXConnectorModel; import nsole useractions AbstractUserAction; / This is a simple user action getting stackdumps from the selected JRockits and printing them on stdout @author Marcus Hirt / public class MyUserAction extends AbstractUserAction { public void executeAction(List connections) { for (RJMXConnectorModel connection : connections) { if (connection isConnected()) { try { System out println(CommonRJMXNames getThreadMXBean(connection) getThreadStackDump()); } catch (IOException e) { e printStackTrace(); } } } } }
接下来 需要在consolesettings xml文件中配置部属描述符 以便用户动作对于控制台可用 可以在配置文件中发现user_actions元素 它已经填充了一些user_action元素 示例动作的部署描述符应当以相同的样式输入 描述符看起来会是这样
<user_action> <user_action_class> example useractions MyUserAction</user_action_class> <user_action_name>stackdump</user_action_name> <user_action_menu_name>Stack Dump on stdout</user_action_menu_name> <user_action_description>Gets a stack dump from the selected JRockit(s) and dumps it on stdout </user_action_description> </user_action>
这也使得用户动作在Plugins菜单下的用户界面中可见
当控制台启动或退出时 如果有设置/状态需要从配置文件加载/保存 只需重写exportToXml()/importFromXml()方法 如示例中所示
/ @see nsole util XmlEnabled #exportToXml( w c dom Element) / public void exportToXml(Element parentNode) { super exportToXml(parentNode); XmlToolkit setSetting(parentNode MY_PROPERTY m_myVal); } / @see nsole util XmlEnabled #initializeFromXml( w c dom Element) / public void initializeFromXml(Element parentNode) { super initializeFromXml(parentNode); m_myVal = XmlToolkit getSetting(parentNode MY_PROPERTY DEFAULT_MY_VALUE)); }
注意 用户动作的名称是使用launcher启动参数时将引用的用户动作名称 菜单名是会在GUI菜单中显示的名称 更多的信息请参见user action docs和JLMEXT docs 注意 这只是一个试验性的功能 提供的文档还相当简单 编写定制的通知动作和约束的方式与此类似 更多信息请参见Management Console User Guide
JRockit发现协议(JDP)JDP(JRockit发现协议)是个简单且有效的协议 用于允许JRockit管理服务器向Management Console组播它的存在 下面的两个表分别列出了在服务器端和客户端控制JDP行为的系统属性
管理服务器的JDP属性 系统属性 描述 默认值 jrockit managementserver autodiscovery 启用JRockit发现协议 False jrockit managementserver discovery period 在两个ping之间需要等待多久(以毫秒为单位) jrockit managementl 活跃的跃点数 jrockit managementserver discovery address 所使用的组播地址 jrockit managementserver discovery port 所使用的组播端口
Management Console的JDP属性 系统属性 描述 默认值 nsole preferences jdp port 用于JRockit发现协议的端口 nsole preferences jdp address 所使用的组播地址
这里给出了在服务器端启用JDP的情况下 启动JRockit需要最少参数的示例
java Xmanagement Djrockit managementserver autodiscovery=true<your program>
Ctrl Break Handler
您是否曾经希望在JVM启动后可以使用一种轻松的方式与其交互?假如说您忘记添加 Xmanagement选项来启动管理服务器 或者您想改变运行系统中GC的冗余级别 这些现在很容易通过重新配置Ctrl Break Handler来完成 而且它不只是打印堆栈跟踪
用法
创建一个名为ctrlhandler act的文件 向ctrlhandler act文件添加命令(参见下文命令列表) 以 stop 结束文件 这是结束文件分析的保留命令 按下ctrl break 每一个命令都将以出现的顺序执行JRockit首先会在当前工作目录查找该文件 如果未找到 JRockit将在JVM目录中查找 如果仍然没有的话 JRockit将回退以生成一个常规的线程堆栈转储 JRockit将在每次按下ctrl break时读取act文件 因此用户可以在方便时重新配置该文件 而同时JRockit仍在运行
这里给出一个示例act文件 它首先打印时间戳 然后是用于启动JRockit的命令行 最后是一个线程堆栈转储 它还包括可以用于act文件的有用命令的列表
# Example ctrlhandler act file timestamp mand_line print_threads stop # set_filename filename=<file> [append=true] # Sets the file that all handlers following this mand will # use for printing You can have several set_filename mands # in a file It takes o arguments: filename and an optional # append to specify if you want to append to the file # or overwrite it Default is to overwrite the file # timestamp # Prints a timestamp # print_threads # The normal thread dump # verbosity [args=<ponents>] [filename=<file>] # Changes the verbosity level normally specified with Xverbose # version # Prints JRockit version information # mand_line # Prints the mand line used to start JRockit # print_object_summary # Prints heap usage statistics (how much heap is used per class) # together with a delta on how much this has changed since # the last invocation of this ctrl break handler # print_memusage # Prints a memory usage report of how JRockit is using # the memory # heap_diagnostics # Prints a detailed report of the heap including ascii graphics # over the heap layout # print_class_summary # Prints all loaded classes # print_utf pool # Print all UTF strings # jrarecording [filename=<file>] [time=<time>] [nativesamples=true] # Starts a JRA recording # run_optfile [filename=<file>] # See OptFile # start_management_server # Starts the new JMX based management agent # kill_management_server # Stops the management agent # start_rmp_server # Starts the old management server (actually the listening # socket that in turn starts servers whenever a connection # is established) # kill_rmp_server # Stops the old management server (actually shuts down the # listening socket) The only reason it isn t named # kill_rmp_server is that stop is a reserved keyword # that stops the parsing of the act file ;) # help [ctrl break handler] # Prints all available ctrl break handlers if no argument # is specified or help for the specified ctrl break handler # memleakserver [port=<port>] # Toggles the memleakserver If it hasn t been started # it will be started If it has already started it will be # shut down The default port is # verbose_referents action=[heap|full|nursery|start|stop] # Print verbose reference information # Parameters: # action=[heap|full|nursery|start|stop] # heap trigger a heap collection and output reference # information # full trigger a full heap collection (clears softly # reached soft referents) # nursery trigger a nursery collection (heap collection # if running without nursery) # start start writing reference information to default # verbose stream # stop stop writing reference information # print_exceptions # exceptions=[true|all|false] stacktraces=[true|all|false] # Enable printing of Java exceptions thrown in the VM # Parameters: # exceptions print exceptions # stacktraces print exceptions with stacktraces # At least one of the parameters is required # Values for the parameters can be true|all|false # true print all exceptions # except java/util/EmptyStackException # java/lang/ClassNotFoundException and # java/security/PrivilegedActionException # all print all exceptions # false don t print exceptions # To turn exception printing off pletely you need to set # exceptions = false even if it was turned # on by stacktraces = true JRCMD 使用JRCMD实用工具是一种新的调用Ctrl Break Handler的便捷方式 可在JRockit发行版的bin目录中找到它 用法 jrcmd <PID> <mand> <parameters>
JRCMD使用JRCMD实用工具是一种新的调用Ctrl Break Handler的便捷方式 可在JRockit发行版的bin目录中找到它
用法 jrcmd <PID> <mand> <parameters>
PID = 要在其中执行Ctrl Break Handler的JRockit进程的进程ID mand = 要执行的Ctrl Break Handler命令 parameters = Ctrl Break Handler的参数如果不指定选项(或者只指定 P) 那么将显示运行在本地机器上的所有JRockit的进程ID 如果PID设为 那么命令将发送给在本地机器上运行的所有JRockit JVM
要列出特定的JRockit中有哪些Ctrl Break Handler可用 可以使用help命令
jrcmd <PID> help
要想获得某个具体的Ctrl Break Handler的帮助信息 需要在help后添加Ctrl Break Handler的名称 比如
jrcmd help kill_management_server
也可以使用JRCMD列出指定进程的性能计数
jrcmd <PID> l
远程调用Ctrl Break Handler可以使用JRockit Management Console来远程调用Ctrl Break Handler 存在一个对JRockitConsoleMBean的 *** 作 称为runCtrlBreakHandlerWithResult JRockit Management Console可以从属性浏览器调用对MBean的 *** 作 这里有关于如何调用Ctrl Break Handler的逐步描述
连接到一个运行中的JRockit 右击该连接 选择Browse Attributes 展开 jrockit domain文件夹 选择JRockitConsole MBean 单击operations选项卡 查看可用 *** 作 单击String parameter参数按钮 找到runCtrlBreakHandlerWithResult *** 作 输入希望执行的Ctrl Break Handler名称 语法与ctrlhandler act文件相同 按下OK 按下Execute按钮 执行 *** 作试着输入 help 作为参数 将会列出所有可用的Ctrl Break Handler 如图 所示
图 从JRockit Management Console调用Ctrl Break Handler(单击查看大图)
堆视图(试验性)当分析应用程序如何使用某种垃圾收集策略时 在每一次GC后对堆进行快照将会非常有帮助 这有助于开发人员研究数据 比如碎片/压缩以及算法通常如何执行 但是快照中包含如此多的数据量以至于查看它没有什么意义 因此JRockit团队开发了一个提供图形化表示的小工具 以便更好地进行说明
图 显示了一个快照的例子(使用的是一个非常早的JRockit 预发布版本)
每一排表示一次垃圾收集 左边是开始的堆 右边是结束的堆 堆显示的右边是一个可配置图形 实心白 域表示空白堆 黑 域是充实区(也就是填充了对象的区域) 浅灰 域是碎片区 红色 **和绿 域是可配置图形 可以从命令行指定在可配置图形中显示什么 该工具依然很粗糙 对于用户也不够友好 不过毋庸置疑它对JRockit的终端用户非常有用 所以这是一个非常不错但是不能通用的工具
code coverage(试验性)很多开发人员在以某种方式使用他们的应用程序时 使用code coverage分析来研究诸如代码库中的多少以及哪些部分正在运行之类的状况 测试人员喜欢使用code coverage来度量测试套件覆盖应用程序的比例 但是 对于大型应用程序 由code coverage工具所引起的性能开销通常是被禁止的
JRockit内置了高性能的行code coverage 当启用code coverage运行时 代码将由记录行命中的捕获器生成 一旦某行被命中并记录 就删除捕获器 JRockit可以继续以接近全速的速度运行
要使JRockit记录code coverage数据 必须指定一个命令行选项
用法 Xcodecoverage
可以使用以下系统属性来控制该行为
系统属性 描述 decoverage filter=<filterspec> filterspec是个以分号(Windows)或冒号(Linux)隔开的筛选器字符串列表 它定义哪些类应当被覆盖 以 开头的筛选器字符串会被视为不应当覆盖的类
示例 decoverage filter=java/util/Hashtable;/bea/; /bea/bla
decoverage filterfile=<filename> 设置包含筛选器定义的文件的文件名 文件格式为每行一个筛选器字符串 decoverage outputfile=<filename> 设置存放输出的文件 如果写入<filename>_ 输出文件不能被打开 那么将尝试<filename>_ 以此类推 在多个JVM共享一个公共命令行的情况中 这可能会很有用 decoverage testid=<id string> 设置初始测试标识符 decoverage verbose 使code coverage更为详细 适用于在覆盖文件(均是纯文本文件)中执行文本比较 decoverage appendoutput 设置对输出文件的写入为追加而不是覆盖
这里给出特定于code coverage的参数 用于生成如下图中所示的数据
Xcodecoverage decoverage filter=/jrockit/console/;/jrockit/mon/ decoverage outputfile=console_coverage txt
在内部 由一个code coverage小工具来解释JRockit所生成的数据 如图 所示
图 code coverage工具的输出示例
lishixinzhi/Article/program/Java/hx/201311/26298
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)