9月24
解决方法
写入excel时使用 SXSSFWorkbook workbook = new SXSSFWorkbook(xssfWorkbook , 1000);只在内存中留1000行,不会占用过多的内存。下面只贴了部分代码。

public static void createExcelByTrade(List mergeCellConfigList ,  Map cellConfMap , List dataList ,String tempPath , String fileName  ) {
        try {
          int  excelRowNum  = 0;      
          short fontSize = 12;        
          // 创建新的Excel 工作簿
          XSSFWorkbook xssfWorkbook = new XSSFWorkbook();
          SXSSFWorkbook workbook = new SXSSFWorkbook(xssfWorkbook , 1000);
                          
          Sheet sheet = workbook.createSheet(fileName);        
          // 设置合并表头        
          setMergeHeaderCellByTrade(   workbook,   sheet,    mergeCellConfigList ,  excelRowNum,   fontSize );
          excelRowNum ++ ;
          excelRowNum ++ ;
        
          //设置表头
          setHeaderCell(  workbook,   sheet,  cellConfMap ,  excelRowNum,   fontSize );
          excelRowNum ++ ;     //查询数据库中所有的数据  
          setCellData(   workbook,   sheet, cellConfMap,   dataList,   excelRowNum,   fontSize);                        
          // 新建一输出文件流
          FileOutputStream fOut = new FileOutputStream(tempPath);
          // 把相应的Excel 工作簿存盘
          workbook.write(fOut);
          //清空缓冲区数据
          fOut.flush();
          // 操作结束,关闭文件
          fOut.close();
          System.out.println("文件生成...");
        } catch (Exception e) {
            e.printStackTrace();
          System.out.println("已运行 xlCreate() : " + e);
        }
      }

9月23
一 、查看内存情况
#按 k 查看

free
点击在新窗口中浏览此图片
#按兆M查看

free -m


total:总计物理内存的大小。
used:已使用多大。
free:可用有多少。
Shared:多个进程共享的内存总额。
Buffers/cached:磁盘缓存的大小。
#所以空闲内存=free+buffers+cached=total-used
内存的使用情况
cat /proc/meminfo

查看进程的内存占用
pidstat -r -p 24427 1 5

内存占用高的前20
ps aux | head -1;ps aux |grep -v PID |sort -rn -k +4 | head -20

动态查看内存占用
slabtop

二 、问题定位
cached 占用过高问题
buffer,cached的作用:

cached主要负责缓存文件使用, 日志文件过大造成cached区内存增大把内存占用完 .
Free中的buffer和cache:(它们都是占用内存):
buffer : 作为buffer cache的内存,是块设备(磁盘)的缓冲区,包括读、写磁盘
cache: 作为page cache的内存, 文件系统的cache,包括读、写文件
如果 cache 的值很大,说明cache住的文件数很多。

linux服务器会自动释放内存,保障系统运行,但只会释放够用的内存,而不会去释放更多的内存。

解决方法:
手动释放cached方法有三种(系统默认值是0,释放之后你需要再改回0值):
释放前最好sync一下,防止丢数据

sync 在启动机器或关机之前一定要运行sync命令。记住在任何情况下,慎重地执行sync命令决不会有任何坏处,sync命令强制把磁盘缓冲的所有数据写入磁盘


To free pagecache: #echo 1 > /proc/sys/vm/drop_caches

To free dentries and inodes: #echo 2 > /proc/sys/vm/drop_caches

To free pagecache, dentries and inodes: #echo 3 > /proc/sys/vm/drop_caches

#常用方法是

sync

echo 1 > /proc/sys/vm/drop_caches

#清除后要还原系统默认配置:
echo 0 > /proc/sys/vm/drop_caches

#查看设置
sysctl -a | grep drop_caches
补充: echo 字符串 > 文件 就是把字符串内容从定向到文件中
点击在新窗口中浏览此图片

这时查看 free 可以看到 cached 降低了很多
9月8
   从WIN8升级到WIN10 ,Cisco AnyConnect Secure Mobility Client客户端不能使用,打开客户端,显示“The service provider in your current location is restricting access to the Internet. You need to log on with the service provider before you can establish a VPN session. You can try this by visiting any website with your browser.”
。打开网关地址登陆,也还是报这个错。卸载了重装 N次仍然如此。
设置中的  Message  History  显示如下:
[2015/9/8 14:38:24] Ready to connect.
[2015/9/8 14:38:31] Contacting **.**.**.**
[2015/9/8 14:38:31] Please enter your username and password.
[2015/9/8 14:38:33] User credentials prompt cancelled.
[2015/9/8 14:38:33] Use a browser to gain access.

解决方法:
1、推荐安装最新的 Cisco anyconnect-win-3.1.10010  对WIN10支持比较好 下载地址:网盘链接: http://pan.baidu.com/s/1sjzIY1R 密码: g3cp
2、WIN+R 打开运行 , 输入“certmgr.msc”打开证书管理器, 将VPN网关的证书从“其他人”目录 拖至  受信任的根证书颁发机构。
点击在新窗口中浏览此图片
3、  打开客户端 应该就可以,客户端的  Block connections to untrusted servers 这个选项要去掉
点击在新窗口中浏览此图片

至此,连接都正常了。。。
9月1
Word模板引擎,基于Microsoft Word模板和数据生成新的文档,并且支持用户自定义函数,函数可以在Word模板的任何位置执行。

poi-tl是一个完全的Java类库,你可以非常方便的加入到你的Java项目中,核心API只需要一行代码:

XWPFTemplate template = XWPFTemplate.compile("~/file.docx").render(datas);
所有的标签都是以 {{ 开始,以 }} 结束。

{{template}} 文本

{{@template}} 图片

{{#template}} 表格

{{*template}} 列表

{{+template}} Word文档合并

{{?template}}{{/template}} if和foreach功能

示例

从一个超级简单的例子开始:把{{title}}替换成"Poi-tl 模板引擎"。

新建文档template.docx,包含文本{{title}}
TDO模式:Template + data-model = output
//一行代码
XWPFTemplate template = XWPFTemplate.compile("~/template.docx").render(new HashMap(){{
        put("title", "Poi-tl 模板引擎");
}});
template.writeToFile("out_template.docx");

操作手册:http://deepoove.com/poi-tl/
Tags:
9月1
现实企业级Java应用开发、维护中,有时候我们会碰到下面这些问题:

OutOfMemoryError,内存不足

内存泄露

线程死锁

锁争用(Lock Contention)

Java进程消耗CPU过高

......

    这些问题在日常开发、维护中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但能够理解并解决这些问题是Java程序员进阶的必备要求。本文将对一些常用的JVM性能调优监控工具进行介绍,希望能起抛砖引玉之用。

而且这些监控、调优工具的使用,无论你是运维、开发、测试,都是必须掌握的。

A、 jps(Java Virtual Machine Process Status Tool)      

    jps主要用来输出JVM中运行的进程状态信息。语法格式如下:

jps [options] [hostid]
    如果不指定hostid就默认为当前主机或服务器。

    命令行参数选项说明如下:

-q 不输出类名、Jar名和传入main方法的参数

-m 输出传入main方法的参数

-l 输出main类或Jar的全限名

-v 输出传入JVM的参数
   比如下面:

root@ubuntu:/# jps -m -l
2458 org.artifactory.standalone.main.Main /usr/local/artifactory-2.2.5/etc/jetty.xml
29920 com.sun.tools.hat.Main -port 9998 /tmp/dump.dat
3149 org.apache.catalina.startup.Bootstrap start
30972 sun.tools.jps.Jps -m -l
8247 org.apache.catalina.startup.Bootstrap start
25687 com.sun.tools.hat.Main -port 9999 dump.dat
21711 mrf-center.jar
B、 jstack

    jstack主要用来查看某个Java进程内的线程堆栈信息。语法格式如下:

jstack [option] pid
jstack [option] executable core
jstack [option] [server-id@]remote-hostname-or-ip
    命令行参数选项说明如下:

-l long listings,会打印出额外的锁信息,在发生死锁时可以用jstack -l pid来观察锁持有情况-m mixed mode,不仅会输出Java堆栈信息,还会输出C/C++堆栈信息(比如Native方法)
    jstack可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多。下面我们来一个实例找出某个Java进程中最耗费CPU的Java线程并定位堆栈信息,用到的命令有ps、top、printf、jstack、grep。
Tags: , , , , ,
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]