导出JVM的快照文件,并使用MAT打开分析

最近在学习JVM的工作原理,这是高级工程师必学的知识,书放了好久,现在终于鼓起勇气看完了基础部分。

MAT(Memory Analyzer tool)是分析JVM内存使用情况的工具,可以对线上的项目导出dump快照文件,真实的项目一般都是在Linux服务器上运行,而命令行式的分析难免费劲,这是可以通过导出的dump文件导出后,在可视化的界面进行分析。使用eclipse安装mat的过程可以参考:eclipse安装Eclipse Memory Analyzer插件

下面记录一下,如何使用MAT时怎么使用的,具体的使用过程不太好写,自己也在不断的学习过程中,不敢多说,下面仅记录一下其中的两个过程以备忘:

  • 导出项目的快照dump文件
  • 使用mat打开dump文件
  1. 导入项目的快照dump文件

可以通过两种方式导出dump文件,参数设置方式和命令方式。

参数方式导出

我们可以在项目出现OutOfMemory错误的时候让系统自动执行导出dump文件的过程,这是需要设置两个参数

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:\proj.bin

这样在出现内存溢出的时候系统就可以自动导出这个文件,这个文件一般都非常大。

DigitalOcean服务器ssh-key登录配置

     第一次购买DigitalOcean服务器,没曾想,它的登录方式与其他服务器很不同,它没有root默认的登录密码,而是选用了ssh-key的登录方式。
ssh-key登录倒也可以,只是它的配置稍微坑爹了点,稍微搞不好就造成永远也登录不上了,登不上了……
     参考了一些网上的文章,终于找到解决方法了,记录一下吧。

通过sed为账户配置信息

缘起

     由于业务需要,我管理了几台服务器,有客户过来开通账号时,就操作服务器,给他们开通。开通账号的很多操作都是机械性的,但是又非常浪费时间和精力。我维护了一年多的时间,居然一直都是手动配置,今天终于忍不住编写了一个脚本,让它自动帮我完成这一系列的操作,确实非常方便。

Oracle使用游标和循环更新另一张表

缘起

最近遇到个问题,由于业务需要,需要在已有很多用户的系统中,对每位用户绑定唯一一个二维码信息,这个二维码的数据表已经有了,只需要更新二维码表的userId字段即可。这个二维码表有1万条二维码信息,并且这个二维码表的条目是固定的,但要节约使用,用户离职时需要对二维码表更新状态(state)标记,以保证以后复用,系统用户数远不足1万,倒是不会溢出二维码表。
梳理一下思路
  • 二维码表(qrcode)通过字段userId与用户表(user)的id进行关联
  • 二维码表有一万条数据,并且不再新增删除
  • 用户表条目非常少,不会超过1万条

Eclipse启动时构建不能正常停止的解决方法

在使用eclipse进行编程的时候,启动时eclipse进行一些项目的构建和软件的检查,比如会自动构建项目,并校验项目的代码正确性,软件错误的上报,jar包的更行等。但是经常会出现检查一直不停止的情况,非常影响后续的编程。
这时我们可以配置一下eclipse,使其启动速度变快一些,其实就是去掉一些无谓的检查。

多线程知识整理

  • 使用 isInterrupted()方法判断中断状态
  • 可以在 Thread 对象上调用 isInterrupted()方法来检查任何线程的中断状态。
    这里需要注意:线程一旦被中断,isInterrupted()方法便会返回 true,而一旦 sleep()方法抛出异常,它将清空中断标志,此时isInterrupted()方法将返回 false。
  • 使用 Thread.interrupted()方法判断中断状态

    可以使用 Thread.interrupted()方法来检查当前线程的中断状态(并隐式重置为 false)。又由于它是静态方法,因此不能在特定的线程上使用,而只能报告调用它的线程的中断状态,即判断的都是当前这个线程的状态。

mysql按条件输出不同字段的情况

mysql中遇到输入不同字段的情况。
项目中遇到一个情况,如果original_account字段的值不为0,则选择该值original_account,如果为0,则选择account这个字段
可以使用mysql自带的IF函数,非常方便。
IF(expr1,expr2,expr3)
果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。
那么这个sql语句就是:
SELECT sum(if(original_account =0, account, original_account)) as account
from dw_borrow  
类似的还有
select *,if(sva=1,"男","女") as ssva from user where sva != ""

 

解决mac下sudo失效的问题

最近要在mac安装maven,需要将maven放到/usr目录下,当执行命令

sudo apache-maven-3.3.9 /usr

输入密码时,出现了operation not permitted的问题,没有权限操作,明明密码是正确的,还依然报错。

于是网上找原因,原来是自mac系统升级到

OS X El Capitan后,在内核下引入了Rootless机制,以下路径:

/System
/bin
/sbin
/usr (except /usr/local)

均属于Rootless范围,即使root用户无法对此目录有写和执行权限,只有Apple以及Apple授权签名的软件(包括命令行工具)可以修改此目录。

一个解决方法是关闭Rootless,具体如下:

用树莓派打造家庭级的NAS

c2c2122d4f849ee9f8ae3a2a6a836162

缘起

今年树莓派3刚发售的时候就下单了树莓派3,,打算拿它来研究点东西。
最近买了一些学习的会员账号,下载了一些视频和音频的会员服务,想在家里学习一下。问题是,家里有好几个设备,PC、mac和手机,如果在每台设备上都能看(听)的话,要分别在设备插上移动硬盘,这样当然是观看最直接的方式,但是这样势必非常的麻烦,每次都要拔插硬盘,而且手机也不支持移动硬盘;当然也可以将文件分别保存到各个设备上面,但是这样一份文件存到多个地方也会占用很大的空间。
所以我想,何不利用树莓派打造成一个家庭级别的多媒体服务器,其他设备通过软件直接观看这台树莓派上面的视频等文件呢?