Java和Python使用Grpc访问Tensorflow的Serving代码

发现网上大量的代码都是mnist,我自己反正不是搞图像处理的,所以这个例子我怎么都不想搞; wide&deep这种,包含各种特征的模型,才是我的需要,iris也是从文本训练模型,所以非常简单; 本文给出Python和Java访问Tensorflow的Serving代码。 Java版本使用Grpc访问Tensorflow的Serving代码 [crayon-5d58bd55e56069809 … 继续阅读Java和Python使用Grpc访问Tensorflow的Serving代码

Spark使用JAVA编写自定义函数修改DataFrame

本文的代码涉及几个知识点,都是比较有用: 1、Spark用JAVA编写代码的方式; 2、Spark读取MySQL数据表,并且使用的是自定义SQL的方式,默认会读取整个表的; 3、Spark使用sql.functions的原有方法,给dataframe新增列、变更列; 4、Spark使用udf的自定义函数,给dataframe新增列、变更列; [crayon-5d58bd55e5bc12225623 … 继续阅读Spark使用JAVA编写自定义函数修改DataFrame

快速找到Tomcat中最耗CPU的线程

1、找出TOMCAT的JVM的进程ID

2、查看该进程中,最耗费CPU的线程

3、以TID==326为例,查看该线程的堆栈 首先,将十进制的326转换成十六进制,可以在线转换: http://tool.oschina.net/hexconvert 结果等于146 使用 … 继续阅读快速找到Tomcat中最耗CPU的线程

Java线程池ThreadPoolExecutor详解

1、线程池的工作原理? 线程池刚创建时,里面没有一个线程。任务队列是作为参数传进来的。不过,就算队列里面有任务,线程池也不会马上执行它们。 当调用 execute() 方法添加一个任务时,线程池会做如下判断: 如果正在运行的线程数量小于 corePoolSize,那么马上创建线程运行这个任务; 如果正在运行的线程数量大于或等于 corePoolSize,那么将这个任务放入队列。 如果这时候队列满了 … 继续阅读Java线程池ThreadPoolExecutor详解

Tomcat内存分析相关方法(jmap和mat)

Linux环境命令行 首先,根据进程命令,获取运行的tomcat的进程ID

在第二列可以看到进程ID 然后使用jmap可以查看内存占比:

输出的结果包括了内存各个部分的占比:

如上可以清楚的看到内存配置 … 继续阅读Tomcat内存分析相关方法(jmap和mat)

Log4j将不同Package的日志输出到不同的文件的方法

随着项目规模的越来越大,会不断的引入新的模块,不同的模块都会打印自己的日志,最后就造成日志根本没法查看,比如我自己的项目中,就存在以下这些日志: 接收外界消息的日志、对外发送消息的日志; 后台常驻线程的处理日志; 外部接口访问的参数、返回结果等接口日志; Service访问数据库产生的SQL日志; 这其中,消息日志和后台线程的日志数据量非常庞大,如果所有日志打印在一个文件中,使用tail -f l … 继续阅读Log4j将不同Package的日志输出到不同的文件的方法

数据处理中提升性能的方法-引入并发但是避免同步

背景 只要存在数据库,就会有后台批量处理数据的需求,比如数据表备份、定期清理、数据替换、数据迁移,对于批量处理来说,往往会涉及大量的查询、过滤、归类、聚合计算,在批量脚本中直接查询数据库往往性能太低,甚至会因为一个大型的SQL导致数据库锁表出现线上事故,因此一般采用先导出到文件,在文件上计算然后再导入,比如: 1、使用mysql -e “select * from table&#822 … 继续阅读数据处理中提升性能的方法-引入并发但是避免同步

将Maven工程打包成可执行JAR包的方法

如果项目中有需要后台执行的任务,但是主要的逻辑都在Java代码中,那么我采用的方式是单独建立一个maven模块打成jar包,然后在linux后台通过命令执行Jar包的Main函数:

于是就有个前提,得将maven模块打包成jar包,原本很简单的事情,却出现了很多问题。 原始打包方式:使用maven-assembly-plugin P … 继续阅读将Maven工程打包成可执行JAR包的方法

Java线程死亡的几种情况

Java线程会议如下三种方式结束,结束后就处于死亡状态 1、run()或者call()方法执行完成,线程正常结束; 2、线程抛出一个未捕获的Exception或Error; 3、直接调用该线程的stop()方法来结束该线程;   注意:当主线程结束时,其他线程不受任何影响,并不会随之结束。一旦子线程启动起来后,它就拥有和主线程相同的地位,不会受到主线程结束的影响。 为了测试某个线程是否已 … 继续阅读Java线程死亡的几种情况

通过JVM堆栈分析出现大量线程的原因

最近收到线上Tomcat线程数目超出的报警,于是想要分析下问题的原因: 首先进入线上,使用ps -aux命令,查看jvm进程,可以得到运行tomcat的jdk的地址: /home/work/app/.jdk/bin/java 于是就知道了jdk的jstack、jps等命令的目录,然后找到jvm进程

得到了jvm的tomcat进程是2 … 继续阅读通过JVM堆栈分析出现大量线程的原因