- 浏览: 36886 次
- 性别:
- 来自: 北京
最新评论
-
clearity:
793059909 写道jconsole也是向上趋势,但内存是 ...
Java中的内存泄露 -
793059909:
jconsole也是向上趋势,但内存是先减少再增加,一直没有泄 ...
Java中的内存泄露
文章列表
Paxos协议
- 博客分类:
- Distributed Related
现如今网站中,涉及到一定规模的都会引入分布式的部署和实现。说到分布式系统,那就要提到它所使用的信息交换方式,不外乎两种,一种为通过共享内存共享数据,另外一种是通过传递消息来完成。
但是使用消息传递的 ...
Java NIO Channel
- 博客分类:
- NIO
Java中nio的通道和流有一些不同之处:
1.通道可以同时支持读与写,而流只能是其中之一;
2.通道支持异步读写;
3.通道的读写都通过Buffer缓冲空间进行。
通道的读写流程如下:
通道的几种实现:
FileChannel(服务于文件)
DatagramChannel(服务于UDP数据报)
SocketChannel(服务于TCP 的数据读写)
ServerSocketChannel(服务于TCP 服务端,监听请求的TCP连接,为每个连接创建一个SocketChannel )
基本通道使用的例子
RandomAccessFile aFile ...
Linux中find命令的使用
- 博客分类:
- Linux
查找所有的隐藏文件:
find . -regex '.*/\..*'
删除所有java文件:
rm -rf `find . -name *.java`
删除所有后缀为.svn的目录:
rm -rf `find . -type d -name .svn`
为web server递归设置权限:
chmod -R a+r ~/www
find ~/www -type d -exec chmod a+x {} \;
查找所有的可执行文件:
find . -executable -type f
怎样得知当前机器上某个端口上运行的具体服务呢?下面演示的是在linux上获取端口80上运行服务的命令:
lsof -i -n -P | grep :80
安装SQL Buddy
sudo apt-get install apache2 libapache2-mod-php5 php5-mysql
sudo /etc/init.d/apache2 restart
下载SQL Buddy,解压,拷贝到目录 /var/www。
接受远程服务器的连接:
1.在/etc/mysql/my.cnf文件中绑定地址到你的IP上
2.运行命令 /sbin/i ...
同步一个过期很久的MongoDB副本
- 博客分类:
- No SQL
登录副本集的主节点运行rs.status()命令看到如下信息:
{
"_id" : 4,
"name" : "55.55.55.55:27017",
"health" : 1,
"state" : 3,
"stateStr" : "RECOVERING",
"uptime" : 502511,
"optime" : {
"t" : 1340841938000, ...
获取MongoDB中所有集合的大小
- 博客分类:
- No SQL
下面是一段以M为单位获取所有集合的代码:
var collNames = db.getCollectionNames();
for (var i = 0; i < collNames.length; i++) {
var coll = db.getCollection(collNames[i]);
var stats = coll.stats(1024 * 1024);
print(stats.ns, stats.storageSize);
}
Java中堆栈跟踪信息的使用
- 博客分类:
- 优化实践
Java中可以如下的打印出堆栈跟踪信息:
new Exception().printStackTrace();
但是如果想更好的输出,可以使用下列相似的代码规范生成:
System.out.println("Printing stack trace:");
StackTraceElement[] elements = Thread.currentThread().getStackTrace();
for (int i = 1; i < elements.length; i++) {
StackTraceElement s = eleme ...
通过Eclipse远程调试
- 博客分类:
- 优化实践
希望通过Eclipse远程调试命令行启动的程序,需要将程序设置为远程调试模式:
java -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y -jar myProgram.jar
现在打开Eclipse
Run > Debug Configurations... > Remote Java Application > New
保证端口和命令行启动的端口一致,默认是8000,现在点击“debug”就可以了。
下面为嵌入使用Tomcat的示例代码:
import java.net.URL;
import org.apache.catalina.Context;
import org.apache.catalina.core.AprLifecycleListener;
import org.apache.catalina.core.StandardServer;
import org.apache.catalina.deploy.FilterDef;
import org.apache.catalina.deploy.FilterMap;
import org.apache.cata ...
Nginx本机SSL配置
- 博客分类:
- Nginx
首先安装nginx
sudo apt-get install nginx
必须安装SSL模块,nginx官方文档指明不包括在默认配置中,可以通过运行nginx -V来查看是否包含--with-http_ssl_module。
下一步是生成SSL证书,现在可以配置nginx了。
upstream backend {
server 127.0.0.1:9000;
}
server {
server_name www.yourdomain.com yourdomain.com;
rewrite ^(.*) https://www.yourd ...
可以使用Percona Xtrabackup创建Mysql备份数据,运行下面命令:
$ innobackupex --user=DBUSER --password=DBUSERPASS /path/to/BACKUP-DIR/
对应的恢复数据操作如下:
$ xtrabackup --prepare --datadir=/var/lib/mysql --target-dir=/path/to/BACKUP-DIR/
$ sudo service mysql stop
$ sudo mv /var/lib/mysql ~/dbbackup
$ sudo mv /path/to/B ...
Java堆内存溢出调试工具
- 博客分类:
- 优化实践
可以通过以下选项设置当虚拟机发生内存溢出异常的时候生成堆栈转储信息:
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/mydump.hprof
分析转储信息的方式:
安装Eclipse内存分析器(eclipse memory analyzer)
使用大内存设置启动Eclipse:eclipse -vmargs -Xmx6G
打开Eclipse内存分析选项页: Window > Open Perspective > Other > Memory Analysis
Java中的内存泄露
- 博客分类:
- Performance
Q:在Java中怎么可以产生内存泄露?
A:Java中,造成内存泄露的原因有很多种。典型的例子是一个没有实现hasCode和
equals方法的Key类在HashMap中保存的情况。最后会生成很多重复的对象。所有的内存泄露
最后都会抛出OutOfMemoryError异常,下面通过一段简短的通过无限循环模拟内存泄露
的例子说明一下。
import java.util.HashMap;
import java.util.Map;
public class MemoryLeak {
public static void main(String[] args ...
看以下的文档:
Collection : domain
{
"_id" : 1001,
"domainName" : "google.com"
"tag" : [
"search engine",
"search",
"find anything",
"giant"
]
},
{
"_id" : 1002,
"domainName" ...