tonglin0325的个人主页

使用jmap排查java程序内存泄露

1.使用jmap命令生成内存快照文件(Heap Profile)

1
2
jmap -dump:format=b,file=heap.hprof ${pid}

如果生成快照的时候遇到如下报错

1
2
3
4
5
6
7
8
9
Dumping heap to /mnt/tmp/heap.hprof ...
Exception in thread "main" java.io.IOException: Premature EOF
at sun.tools.attach.HotSpotVirtualMachine.readInt(HotSpotVirtualMachine.java:292)
at sun.tools.attach.LinuxVirtualMachine.execute(LinuxVirtualMachine.java:200)
at sun.tools.attach.HotSpotVirtualMachine.executeCommand(HotSpotVirtualMachine.java:261)
at sun.tools.attach.HotSpotVirtualMachine.dumpHeap(HotSpotVirtualMachine.java:224)
at sun.tools.jmap.JMap.dump(JMap.java:247)
at sun.tools.jmap.JMap.main(JMap.java:142)

添加如下参数就可以解决

1
jmap -J-d64 -dump:format=b,file=/mnt/tmp/heap.hprof ${pid}

参考:jmap -dump导出jvm堆内存信息时报错

2.使用Eclipse Memory Analyzer工具对hprof文件进行分析

如果机器的java版本是java8的话,需要注意MAT

全文 >>

Flink学习笔记——Flink SQL

flink官方从1.8.0开始提供Table&SQL API,参考

1
2
https://github.com/apache/flink/tree/release-1.8.0/flink-table

如果想使用Flink SQL的话,可以参考官方的get start文档,如下

1
2
https://nightlies.apache.org/flink/flink-docs-master/docs/dev/table/sql/gettingstarted/

找到flink的安装目录

1
2
cd /usr/lib/flink

首先需要启动一个flink集群,这里使用yarn-session模式来启动一个flink session集群,比如

1
2
./bin/yarn-session.sh -n 3 -s 5 -jm 1024 -tm 4096 -d

一旦flink集群启动,你就可以访问一个本地的FlinkUI

如下

也可以在YARN上看到flink session cluster的任务

这时再启动flink SQL

1
2
./bin/sql-client.sh

1
SELECT 'Hello World';

运行结果

默认的显示模式是表格模式,可以通过一下语句进行调整

1
2
3
4
SET sql-client.execution.result-mode = table;
SET sql-client.execution.result-mode = tableau;
SET sql-client.execution.result-mode = changelog;

tableau模式,更接近于spark sql的显示方式

changelog模式,变更日志模式(changelog mode)不会物化结果。可视化展示由插入(+)和撤销(-)组成的持续查询结果流。

参考:flink sql-client 菜鸟记录

全文 >>

Flink学习笔记——Standalone模式

Flink的部署方式有如下几种,本文主要介绍standalone模式

1
2
3
4
5
Yarn
Mesos
Docker/Kubernetes
Standalone

standalone模式的官方文档可以参考

1
2
https://nightlies.apache.org/flink/flink-docs-master/docs/deployment/resource-providers/standalone/overview/#standalone

进入flink的安装目录

1
2
/usr/lib/flink

启动一个standalone的flink集群

1
2
./bin/start-cluster.sh

这时可以在默认的8081端口查看FlinkUI

提交任务

1
2
./bin/flink run ./examples/streaming/TopSpeedWindowing.jar

关闭集群

1
2
./bin/stop-cluster.sh

linux os参数调优

1、net.core.somaxconn

net.core.somaxconn是Linux中的一个kernel参数,表示socket监听(listen)的backlog上限。什么是backlog呢?backlog就是socket的监听队列,当一个请求(request)尚未被处理或建立时,他会进入backlog。而socket server可以一次性处理backlog中的所有请求,处理后的请求不再位于监听队列中。当server处理请求较慢,以至于监听队列被填满后,新来的请求会被拒绝。在Hadoop 1.0中,参数ipc.server.listen.queue.size控制了服务端socket的监听队列长度,即backlog长度,默认值是128。而Linux的参数net.core.somaxconn默认值同样为128。当服务端繁忙时,如NameNode或JobTracker,128是远远不够的。这样就需要增大backlog,例如我们的3000台集群就将ipc.server.listen.queue.size设成了32768,为了使得整个参数达到预期效果,同样需要将kernel参数net.core.somaxconn设成一个大于等于32768的值。

参考:关于linux内核参数的调优,你需要知道

全文 >>

Presto学习笔记——Python客户端连接Presto

参考:三种客户端连接Presto

1.使用 presto-client

1
2
pip install presto-client==0.302.0

查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import presto

# demo about the usage of presto-python-client
conn = presto.dbapi.connect(
host='localhost',
port=8889,
user='hadoop',
catalog='xx_catalog',
schema='default'
)
cur = conn.cursor()
sql = "select * from xxx.xxx limit 10"
cur.execute(sql)
rows = cur.fetchall()
print(rows)

helm部署kubernetes-dashboard

kuberbetes-dashboard是K8S的管理工具,下面使用helm来进行部署,参考:

1
2
https://artifacthub.io/packages/helm/k8s-dashboard/kubernetes-dashboard

首先添加源

1
2
helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/

查找chart

1
2
3
4
5
helm search repo kubernetes-dashboard

NAME CHART VERSION APP VERSION DESCRIPTION
kubernetes-dashboard/kubernetes-dashboard 5.4.1 2.5.1 General-purpose web UI for Kubernetes clusters

部署release

1
2
helm install my-k8s-dashboard kubernetes-dashboard/kubernetes-dashboard

访问kubernetes dashboard

1.修改kubernetes-dashboard的svc,将ClusterIp改成NodePort

全文 >>