⑴ 几种常见的操作tomcat的linux命令
重启tomcat
ps x 查看pid
kill -9 pid 杀死进程
/app/tomcat/bin/startup.sh 启动tomcat
追踪日志
tail -f /app/tomcat/log/*.log
配置文件
vi /app/tomcat/webapp/root/WEB-INF/server.properties 查看服务器配置
vi /app/tomcat/webapp/root/WEB-INF/web.xml 查看后端文件位置
vi /app/tomcat/webapp/root/WEB-INF/common-applicationcontext.xml 查看数据库
查看内存溢出
top 查看系统性能
jmap -heap pid 打印heap的概要信息
jmap -histo pid 打印每个class的实例数目,内存占用,类全名信息
jmap -mp:format=b,file=heap.bin pid 输出heap信息到heap.bin文件
jhat -J-mx768m heap.bin 分析heap.bin文件
最好使用eclipse的MAT查看heap.bin,相比jhat等更加直观,容易发现内存溢出
查看死锁
jstack -l pid > deadlock.jstack 输出stack信息到deadlock.jstack
vi deadlock.jstack 使用vi查看
数据库导出
/usr/local/mysql/bin/mysqlmp -u root -p test > test_new.sql
数据库导入
/usr/local/mysql/bin/mysql -u root -p test < test_new.sql
选择性查看日志
grep * /app/tomcat/log/*.log|cut -d '#' -f 8-9|sort -t '#' -u
⑵ 如何查看unix 的java内存使用情况
jmap (linux下特有,也是很常用的一个命令)
观察运行中的jvm物理内存的占用情况。
参数如下:
-heap :打印jvm heap的情况
-histo: 打印jvm heap的直方图。其输出信息包括类名,对象数量,对象占用大小。
-histo:live : 同上,但是只答应存活对象的情况
-permstat: 打印permanent generation heap情况
命令使用:
jmap -heap 3409
可以观察到New Generation(Eden Space,From Space,To Space),tenured generation,Perm Generation的内存使用情况
输出内容:
jmap -histo 3409 | jmap -histo:live 3409
可以观察heap中所有对象的情况(heap中所有生存的对象的情况)。包括对象数量和所占空间大小。
输出内容:
写个脚本,可以很快把占用heap最大的对象找出来,对付内存泄漏特别有效。
如果结果很多,可以用以下命令输出到文本文件。
jmap -histo 3409 | jmap -histo:live 3409 > a.txt
jinfo:可以输出并修改运行时的java 进程的opts。
jps:与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。
jstat:一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。
jmap:打印出某个java进程(使用pid)内存内的所有'对象'的情况(如:产生那些对象,及其数量)。
jconsole:一个java GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器VM。
详细:在使用这些工具前,先用JPS命令获取当前的每个JVM进程号,然后选择要查看的JVM。
jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。以下详细介绍各个参数的意义。
jstat -class pid:显示加载class的数量,及所占空间等信息。
jstat -compiler pid:显示VM实时编译的数量等信息。
jstat -gc pid:可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。
jstat -gccapacity:可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OC是old内纯的占用量。
jstat -gcnew pid:new对象的信息。
jstat -gcnewcapacity pid:new对象的信息及其占用量。
jstat -gcold pid:old对象的信息。
jstat -gcoldcapacity pid:old对象的信息及其占用量。
jstat -gcpermcapacity pid: perm对象的信息及其占用量。
jstat -util pid:统计gc信息统计。
jstat -printcompilation pid:当前VM执行的信息。
除了以上一个参数外,还可以同时加上 两个数字,如:jstat -printcompilation 3024 250 6是每250毫秒打印一次,一共打印6次,还可以加上-h3每三行显示一下标题。
jmap是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。
命令:jmap -mp:format=b,file=heap.bin
file:保存路径及文件名
pid:进程编号
?jmap -histo:live pid| less :堆中活动的对象以及大小
?jmap -heap pid : 查看堆的使用状况信息
jinfo:的用处比较简单,就是能输出并修改运行时的java进程的运行参数。用法是jinfo -opt pid 如:查看2788的MaxPerm大小可以用 jinfo -flag MaxPermSize 2788。
jconsole是一个用java写的GUI程序,用来监控VM,并可监控远程的VM,非常易用,而且功能非常强。使用方法:命令行里打 jconsole,选则进程就可以了。
JConsole中关于内存分区的说明。
Eden Space (heap): 内存最初从这个线程池分配给大部分对象。
Survivor Space (heap):用于保存在eden space内存池中经过垃圾回收后没有被回收的对象。
Tenured Generation (heap):用于保持已经在 survivor space内存池中存在了一段时间的对象。
Permanent Generation (non-heap): 保存虚拟机自己的静态(refective)数据,例如类(class)和方法(method)对象。Java虚拟机共享这些类数据。这个区域被分割为只读的和只写的,
Code Cache (non-heap):HotSpot Java虚拟机包括一个用于编译和保存本地代码(native code)的内存,叫做“代码缓存区”(code cache)
?jstack ( 查看jvm线程运行状态,是否有死锁现象等等信息) : jstack pid : thread mp
?jstat -gcutil pid 1000 100 : 1000ms统计一次gc情况统计100次;
另外推荐一款查看jmap mp 的内存对象工具 MemoryAnalyzer
⑶ crateDB搭建与集群部署
欲搭建并部署集群式的 CrateDB 数据库,需遵循以下步骤。首先,访问 CrateDB 官网下载 Linux 版本的数据库文件,通过解压命令进行部署。创建并为 crate 用户赋予权限,确保其具有执行所有操作的权限,并为执行文件与目录分配适当的权限。
对于 Linux 环境,运行 CrateDB 的命令为 `./crate-4.2.2/bin/crate`。在 Windows 环境下,解压文件后,直接在解压目录下,如 `D:\crate-4.2.1\bin` 执行 `crate` 命令即可。
在部署过程中,可能遇到的常见问题包括:没有切换用户、没有赋予文件/文件夹权限以及系统限制导致的错误。对于系统限制的问题,例如 `vm.max_map_count` 的值过低,需通过编辑 `/etc/sysctl.conf` 文件并添加 `vm.max_map_count = 262144` 来解决,或使用 `sysctl -w` 命令来调整配置。如果遇到找不到 `sysctl` 命令的问题,切换到 root 用户并使用 `/sbin/sysctl -p` 来解决问题。
另一个常见的问题是初始堆大小与最大堆大小不匹配,这可能引起运行时的暂停和内存锁定的限制。解决方法是通过环境变量 `CRATE_HEAP_SIZE=2g` 来调整堆大小,或在相关配置文件中修改 `CRATE_MIN_MEM=2g`。
为了实现 CrateDB 的集群部署,需要在配置文件 `crate.yml` 中定义集群的节点信息。将 `discovery.seed_hosts` 设置为所有集群节点的 IP 地址,例如 `192.168.6.98:4300`, `192.168.6.100:4300`, `192.168.6.139:4300` 等。同时,确保 `cluster.initial_master_nodes` 列表与 `node.name`, `node.master`, `node.data`, `network.bind_host`, `network.publish_host`, `gateway.recover_after_nodes` 和 `gateway.expected_nodes` 等参数正确配置。最后,保存配置文件并重启集群中的所有服务器上的 CrateDB 服务。
成功部署后,打开任一台服务器的 `localhost:4200` 页面,应能看到集群状态的显示,这表明集群部署已完成。
⑷ 详解进程的虚拟内存,物理内存,共享内存
在 Linux 环境下编写程序时,分析进程占用的内存情况是常见任务之一。通过 top 命令可以查看进程占用的内存状态,涉及 VIRT、RES 和 SHR 等关键指标。本文将深入探讨虚拟内存、驻留内存的概念,以及 top 命令中 VIRT、RES 和 SHR 的实际意义。
虚拟内存与驻留内存是理解内存使用的关键概念。虚拟内存是在逻辑上设计的一个内存空间,为程序在运行时提供可访问的地址空间。它不同于物理内存,因为虚拟内存空间通常远大于实际可用的物理内存。虚拟内存通过页映射机制将程序运行过程中需要访问的虚拟地址映射到物理内存空间上。
驻留内存是进程实际占用的物理内存,它是虚拟内存空间中映射到物理内存的那部分。RES(Resident Set Size)参数表示驻留内存的大小,而 VIRT(Virtual Memory Size)则表示进程虚拟内存空间的大小。SHR(Shared Memory)代表进程共享内存的大小,即多个进程共享的内存部分。
在深入分析内存使用时,top 命令提供的信息有限,无法详细了解物理内存的使用情况。为解决这一问题,Linux 系统提供了 smaps 文件,它是每个进程的独立文件,记录了进程的虚拟内存使用详情,如 mmap 文件的占用空间、动态内存的开辟情况等。
smaps 文件中的每一条记录对应进程虚拟内存空间中的一块连续区域,详细记录了该区域的地址范围、权限、映射文件偏移等信息。通过分析 smaps 文件,可以获取进程虚拟内存空间的分布情况,包括 heap、文件映射、stack 等的占用情况,以及进程是否有交换到 swap 空间、内存的脏页状态等详细信息。
综上所述,理解虚拟内存与驻留内存的概念,掌握 top 命令输出中的 VIRT、RES 和 SHR 参数含义,以及利用 smaps 文件深入分析进程内存使用情况,对于优化程序性能、定位内存瓶颈至关重要。