Javaer 线上救命手册:高频 Linux 命令全场景实战,从排查问题到服务运维一通到底
作为Java开发者你是否遇到过这些场景线上服务突然告警接口超时飙升却只会用tail -f刷日志找不到根因服务OOM宕机生成的堆dump文件占满磁盘却不知道怎么快速清理和传输部署jar包时权限不足、端口被占、进程意外退出手足无措。 事实上80%的Java线上问题排查、服务部署、性能调优工作都离不开Linux命令。很多Java开发者深耕框架和JVM底层却对Linux命令一知半解导致线上问题处理效率极低甚至踩坑引发线上故障。 本文摒弃无关的冷门参数只聚焦Java开发全生命周期高频、刚需、救命的Linux命令结合真实业务场景讲透用法、底层逻辑、避坑指南所有实例均可直接复制运行既能帮你夯实基础也能直接解决线上实际问题。一、基础高频必知命令Java开发日常操作全覆盖这部分覆盖Java开发每天都会用到的目录导航、文件操作、权限管理命令所有用法均贴合Java服务部署、配置修改、日常运维的真实场景无冗余参数。1.1 目录导航与文件查看cd 命令切换工作目录底层逻辑Linux系统一切皆文件cd命令的本质是修改当前进程的工作目录内核通过修改进程的pwd结构体更新当前目录的inode指针是进入服务部署目录、日志目录的核心命令。 Java高频用法# 进入Java服务部署目录最常用 cd /usr/local/app/service # 回到上一级目录退出jar包所在目录 cd .. # 回到当前用户的home目录上传jar包到home后快速进入 cd ~ # 回到上一次所在的目录日志目录和部署目录之间快速切换 cd -ls 命令目录与文件列表查看底层逻辑ls命令通过读取目录文件的inode信息获取目录下所有文件的属性权限、所有者、大小、修改时间并格式化输出是查看jar包、日志文件、配置文件的首选命令。 Java高频用法# 查看当前目录下所有jar包、脚本的详细信息权限、大小、修改时间 ls -l *.jar *.sh # 以人类可读的格式KB/MB/GB查看文件大小快速定位大体积日志、dump文件 ls -lh # 按修改时间倒序排列快速找到最新生成的日志文件、jar包 ls -lt # 查看所有文件包括隐藏文件比如Java进程的.env配置文件 ls -lacat 命令小文件全量查看底层逻辑cat命令通过open系统调用打开文件逐块读取文件内容到内核缓冲区再输出到标准输出适合查看小体积的配置文件不适合GB级大日志文件。 Java高频用法# 查看Java服务的配置文件application.yml cat application.yml # 合并多个历史日志文件到一个文件方便批量排查问题 cat app.log.2026-03-01 app.log.2026-03-02 total.logmore/less 命令大文件分页查看避坑点cat不适合查看GB级别的日志文件会全量加载占满内存必须用more/less分页加载。 底层逻辑less命令采用分页加载机制只读取当前屏幕需要显示的内容而非全量加载支持上下翻页、关键词搜索、实时刷新是查看大体积日志文件的首选。 Java高频用法# 分页查看大体积日志文件支持回车向下一行、空格向下一页、b向上一页、/关键词搜索、q退出 less app.log # 打开文件后直接跳转到最后一行按F实现实时刷新等价于tail -f less F app.log1.2 文件权限管理解决Java服务启动权限不足问题Java开发最常遇到的启动失败坑启动脚本没有执行权限、jar包没有读权限、日志目录没有写权限都会导致服务启动失败。 Linux权限底层逻辑每个文件/目录都有3类权限主体所有者u、所属组g、其他用户o每类主体有3种基础权限读r(4)、写w(2)、执行x(1)权限数字为对应权限值的和。chmod 命令修改文件权限Java高频用法# 给Java启动脚本添加执行权限90%的启动失败都是因为缺少该权限 chmod x startup.sh # 给jar包赋予所有者读写执行、组和其他用户读权限生产环境标准权限配置 chmod 755 app.jar # 递归给日志目录赋予读写权限解决Java服务无法写入日志的问题 chmod -R 755 /usr/local/app/logschown 命令修改文件所有者避坑点用root用户上传的jar包用普通用户启动Java服务会导致权限不足必须修改文件所有者为服务运行用户。 Java高频用法# 将jar包和配置文件的所有者改为app用户适配Java服务的运行用户 chown app:app app.jar application.yml # 递归修改部署目录的所有者避免子文件权限不一致问题 chown -R app:app /usr/local/app1.3 文件操作部署、配置修改必备mkdir 命令创建部署目录Java高频用法# 递归创建Java服务的部署目录、日志目录、配置目录、jar包目录 mkdir -p /usr/local/app/{bin,logs,config,jar}cp 命令复制文件备份jar包、配置文件Java高频用法# 发布前备份旧版本jar包避免发布失败无法回滚 cp app.jar app.jar.bak.20260304 # 递归复制整个配置目录到部署路径 cp -r /home/upload/config /usr/local/app/mv 命令移动/重命名文件版本更新、文件迁移Java高频用法# 替换新版本jar包 mv app-new.jar app.jar # 移动历史日志文件到归档目录 mv app.log.* /usr/local/app/logs/archive/rm 命令删除文件清理日志、旧版本包⚠️ 高危命令红线严禁使用rm -rf / 删除前必须先用ls确认文件路径优先用find命令批量删除更安全可控。 底层逻辑rm命令通过unlink系统调用删除文件的硬链接当硬链接数为0且没有进程打开该文件时内核才会释放磁盘块。 Java高频用法# 删除指定的旧版本jar包 rm app.jar.bak.20260201 # 强制删除占用磁盘的无用dump文件确认无用后再执行 rm -f java_pid12345.hprof # 递归删除7天前的归档日志文件配合find使用比rm -rf更安全 find /usr/local/app/logs/archive -mtime 7 -name *.log -delete二、日志排查核心命令Java线上问题定位的灵魂Java服务的异常栈、接口耗时、报错信息、用户请求全在日志里掌握这部分命令你就能从GB级的日志中秒级定位到问题根因是Java开发线上工作的核心技能。2.1 实时日志查看tail 命令底层逻辑tail命令默认输出文件的最后10行-f参数通过inotify机制监听文件的修改事件当文件有新内容写入时实时输出到终端是查看Java服务实时运行日志的首选。 Java高频必用用法# 实时查看Java服务的运行日志终端关闭自动退出 tail -f app.log # 实时查看日志同时显示行号方便定位异常位置 tail -nf app.log # 先查看最后1000行日志再实时刷新避免日志过多刷走关键信息 tail -1000f app.log # 监听日志文件的重新创建日志滚动切割后自动监听新文件 tail -F app.log⚠️ 避坑点tail -f 和 tail -F 的核心区别日志文件按天切割后tail -f 会继续监听旧文件的文件描述符不会输出新文件的内容tail -F 会监听文件名文件切割后自动重新打开新文件线上查日志优先用tail -F。2.2 日志内容过滤grep 命令Java问题定位第一神器底层逻辑grep是基于正则表达式的行过滤工具逐行扫描输入内容匹配符合正则规则的行并输出支持多文件、递归、上下文匹配是从海量日志中筛选关键信息的核心工具。 Java高频必用用法全是真实业务场景基础过滤精准查找异常# 查找日志中所有的空指针异常 grep NullPointerException app.log # 查找包含Exception的所有行忽略大小写避免异常类名大小写问题 grep -i exception app.log # 查找不包含health健康检查的请求日志过滤掉无用的健康检查心跳日志 grep -v /health access.log # 精确匹配完整的异常类名避免模糊匹配 grep -w java.lang.NullPointerException app.log进阶用法查看异常上下文查异常栈必用很多开发者只会grep关键词却看不到完整的异常栈这三个参数是线上排查的救命参数-A n输出匹配行的后n行After-B n输出匹配行的前n行Before-C n输出匹配行的前后n行Context等价于-A n -B n# 查找Exception同时输出异常的前5行和后20行拿到完整的异常栈 grep -B 5 -A 20 Exception app.log # 查找指定用户ID的请求输出前后10行查看完整的请求链路 grep -C 10 userId12345 access.log高级用法多条件过滤、多文件匹配# 同时匹配多个关键词查找同时包含订单号和异常的日志 grep orderId123456 app.log | grep Exception # 匹配多个关键词中的任意一个查找空指针和数组越界异常 grep -E NullPointerException|ArrayIndexOutOfBoundsException app.log # 递归查找当前目录下所有日志文件中包含支付失败的日志 grep -r 支付失败 ./logs/ --include*.log # 统计某个异常出现的次数评估故障影响范围 grep -c 支付超时 app.log2.3 日志结构化处理awk 命令统计分析神器底层逻辑awk是一门解释型的文本处理语言核心是逐行处理、按分隔符拆分字段支持条件判断、循环、算术运算能对结构化的Java日志做统计、过滤、聚合分析比如接口耗时统计、TOP报错接口、请求量统计等。 为方便理解先定义Java服务通用的access.log日志格式2026-03-04 10:00:00 INFO com.demo.controller.OrderController - orderId123456, userId789, uri/api/order/create, cost256ms, status200默认分隔符为空格是日期2是时间是8是cost256ms$9是status200。 Java高频必用用法全是可直接复制的实例基础用法字段提取# 提取所有请求的uri和耗时只看接口和耗时过滤无用信息 awk {print $7, $8} access.log # 提取所有状态码非200的请求定位报错接口 awk $9 ! status200 {print $0} access.log # 提取耗时超过1000ms的慢接口定位性能瓶颈 awk {split($8, cost, ); if(cost[2]0 1000) print $7, $8} access.log进阶用法统计分析最常用# 统计每个接口的请求次数按请求量倒序排列找到TOP调用接口 awk {print $7} access.log | sort | uniq -c | sort -nr # 统计每个接口的平均耗时评估接口性能 awk {split($8, cost, ); uri[$7] cost[2]; count[$7]} END {for(i in uri) print i, 平均耗时:, uri[i]/count[i], ms} access.log # 统计不同状态码的请求数量评估服务整体健康度 awk {print $9} access.log | sort | uniq -c | sort -nr # 统计每分钟的请求量查看流量峰值 awk {print substr($2,1,5)} access.log | uniq -c高级用法多条件过滤# 查找指定时间段内耗时超过500ms且状态码非200的异常请求 awk $1 2026-03-04 substr($2,1,2) 10 substr($2,1,2) 11 {split($8, cost, ); if(cost[2]0 500 $9 ! status200) print $0} access.log2.4 日志编辑与替换sed 命令批量修改配置、日志脱敏底层逻辑sed是流编辑器逐行读取文件内容根据指定的规则进行替换、删除、新增等操作无需打开文件适合批量修改配置文件、日志脱敏、内容过滤。 Java高频用法# 批量修改application.yml中的服务端口从8080改为8081 sed -i s/server: port: 8080/server: port: 8081/g application.yml # 日志脱敏将日志中的手机号替换为****避免敏感信息泄露 sed -i s/1[3-9]\d{9}/****/g app.log # 删除日志中所有的健康检查请求行精简日志文件 sed -i /\/health/d access.log # 只输出日志中100行到200行的内容定位指定时间段的问题 sed -n 100,200p app.log2.5 排序与去重sort、uniq 命令通常和awk、grep配合使用完成日志的统计分析Java高频用法# 对接口请求量统计结果按数字倒序排列找到TOP调用接口 awk {print $7} access.log | sort | uniq -c | sort -nr # 去除日志中的重复请求记录只保留唯一的请求ID sort -u access.log -k 10 # 按接口耗时从小到大排序找到最慢的接口 awk {split($8, cost, ); print cost[2], $0} access.log | sort -n三、Java进程与服务运维命令服务部署、状态监控全搞定Java服务的启动、停止、状态监控、端口占用、进程排查全靠这部分命令是Java开发部署服务的必备技能所有实例均贴合生产环境规范。3.1 Java进程查询ps、jps 命令ps 命令进程状态查看底层逻辑ps命令通过读取/proc虚拟文件系统下的进程信息获取进程的PID、运行用户、启动命令、运行时间等信息/proc是Linux内核提供的虚拟文件系统所有进程的运行数据都存储在/proc/目录下。 Java高频必用用法# 查看系统中所有的Java进程获取PID、启动用户、启动命令、JVM参数 ps -ef | grep java # 避坑过滤掉grep进程本身两种标准方法 # 方法1用[]包裹首字符避免匹配到grep进程 ps -ef | grep [j]ava # 方法2用grep -v 排除grep进程 ps -ef | grep java | grep -v grep # 查看Java进程的CPU、内存占用率按内存占用倒序 ps -eo pid,user,%cpu,%mem,cmd | grep java | sort -k 4 -nrjps 命令JDK自带的Java进程专属查询工具优先推荐底层逻辑jps是JDK自带的进程查询工具通过读取Java进程在/tmp/hsperfdata_目录下生成的性能统计文件精准获取Java进程的PID和主类名比ps更精准无多余信息。 ⚠️ 注意如果Java进程启动时添加了-XX:-UsePerfData参数会关闭性能统计文件生成jps将无法识别该进程。 Java高频必用用法# 查看所有Java进程的PID和主类名最常用 jps -l # 查看Java进程的PID、主类名、JVM启动参数 jps -lv # 查看Java进程的PID、主类名、main方法入参 jps -lm3.2 进程终止kill 命令优雅停机vs强制终止必须讲透底层逻辑kill命令的本质是向指定进程发送信号而非直接杀死进程进程收到信号后会根据信号类型执行对应的处理逻辑这是很多开发者的认知盲区。 Java开发最常用的两个信号必须明确区分严禁混用信号命令信号含义Java进程处理逻辑适用场景SIGTERMkill -15 PID终止信号kill默认信号会触发JVM的shutdown hook执行优雅停机关闭线程池、释放数据库连接、持久化数据、关闭socket连接正常停止Java服务优先使用SIGKILLkill -9 PID强制杀死信号内核直接终止进程JVM完全没有机会执行任何清理动作不会触发shutdown hook服务卡死、无法响应kill -15的紧急停机场景⚠️ 生产环境红线线上Java服务优先用kill -15执行优雅停机严禁上来就执行kill -9否则可能导致数据不一致、事务未提交、文件损坏、分布式锁未释放等严重线上故障。Java高频用法# 优雅停止Java进程生产环境优先使用 kill -15 12345 # 强制终止卡死的Java进程仅紧急场景使用 kill -9 12345 # 批量停止指定的Java进程仅测试环境使用线上严禁 ps -ef | grep demo-app | grep -v grep | awk {print $2} | xargs kill -153.3 端口与网络连接查询ss、netstat、lsof 命令Java开发最常遇到的问题端口被占用导致服务启动失败、服务启动后无法访问、数据库连接超时、socket连接泄露这几个命令可以直接定位问题根因。ss 命令新一代套接字统计工具替代netstat性能更强底层逻辑ss命令直接读取内核的tcp_diag模块获取套接字信息比netstat快10倍以上尤其是在系统有大量TCP连接时优势极其明显是Linux最新稳定版的默认推荐工具。 Java高频必用用法# 查看Java进程占用的所有端口找到PID对应的监听端口 ss -tlnp | grep java # 查看指定端口是否被占用比如Java服务的8080端口 ss -tlnp | grep :8080 # 查看Java进程建立的所有TCP连接包括数据库连接、RPC连接、HTTP连接 ss -tanp | grep java # 统计Java进程的TCP连接状态排查TIME_WAIT、ESTABLISHED连接泄露 ss -tan | awk {print $1} | sort | uniq -cnetstat 命令传统网络统计工具兼容旧系统Java高频兼容用法# 查看端口占用情况 netstat -tlnp | grep java netstat -tlnp | grep :8080 # 查看所有TCP连接状态统计 netstat -tan | awk {print $6} | sort | uniq -clsof 命令列出进程打开的文件Linux一切皆文件socket也是文件底层逻辑lsof的全称是list open files通过读取/proc//fd目录下的文件描述符信息获取进程打开的所有文件、端口、socket、管道等是排查JavaToo many open files异常的核心工具。 Java高频必用用法# 查看指定端口被哪个进程占用比如8080端口 lsof -i :8080 # 查看Java进程打开的文件句柄总数排查文件句柄泄露 lsof -p 12345 | wc -l # 查看Java进程打开的所有jar包和类文件排查类加载问题 lsof -p 12345 | grep .jar # 查看哪些进程打开了指定的日志文件排查日志删除后磁盘空间不释放的问题 lsof app.log⚠️ 经典问题解决Java进程删除了日志文件磁盘空间却没有释放。根因是文件被Java进程打开虽然删除了文件名但文件的硬链接数不为0内核不会释放磁盘块。解决方法用lsof | grep deleted 找到对应的进程重启进程或用 app.log清空文件无需重启服务器。3.4 Java服务后台运行nohup、、systemdJava开发部署jar包必须让服务在后台运行终端关闭后不退出这部分讲透底层逻辑和生产环境标准用法。nohup 组合最常用的jar包后台启动方式底层逻辑拆解将进程放到后台运行终端可以继续输入其他命令但终端关闭时进程会收到SIGHUP挂断信号默认会被终止。nohup全称no hang up忽略SIGHUP信号终端关闭后进程不会被终止默认将输出重定向到nohup.out文件。重定向规则Linux的3个标准文件描述符0(stdin标准输入)、1(stdout标准输出)、2(stderr标准错误)。Java标准正确启动命令100%可运行无坑# 后台启动Java服务将标准输出和标准错误都重定向到app.log终端关闭不退出 nohup java -jar app.jar --spring.profiles.activeprod app.log 21 ⚠️ 必懂底层逻辑 app.log 是将标准输出(1)重定向到app.log21 是将标准错误(2)重定向到标准输出(1)的同一个位置也就是app.log。必须把21写在 app.log后面否则标准错误会输出到终端而非日志文件导致排查问题时找不到异常信息。 简化兼容写法仅bash环境可用# 等价于 app.log 21将标准输出和错误都重定向到app.log nohup java -jar app.jar --spring.profiles.activeprod app.log systemd 服务管理生产环境推荐方案支持开机自启、故障自动重启生产环境不能用nohup管理服务必须用systemd支持开机自启、优雅停机、故障自动重启、统一日志管理是企业级Java服务的标准部署方案。 完整实例步骤100%正确可直接复制创建服务配置文件vi /etc/systemd/system/demo-app.service写入以下生产环境标准配置基于最新LTS版本JDK25[Unit] DescriptionDemo Java Application Afternetwork.target syslog.target [Service] Typeforking Userapp Groupapp WorkingDirectory/usr/local/app # Java启动命令使用JDK绝对路径避免环境变量问题 ExecStart/usr/local/jdk-25/bin/java -jar app.jar --spring.profiles.activeprod # 优雅停机命令发送SIGTERM信号 ExecStop/bin/kill -15 $MAINPID # 故障自动重启配置 Restartalways # 故障重启间隔 RestartSec5 # JVM参数环境变量配置 EnvironmentJAVA_OPTS-Xms2g -Xmx2g -XX:UseG1GC -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath/usr/local/app/dump/ [Install] WantedBymulti-user.target生效配置并管理服务# 重新加载systemd配置修改配置文件后必须执行 systemctl daemon-reload # 启动服务 systemctl start demo-app # 查看服务运行状态 systemctl status demo-app # 停止服务 systemctl stop demo-app # 重启服务 systemctl restart demo-app # 设置开机自启 systemctl enable demo-app # 查看服务实时运行日志 journalctl -u demo-app -f四、线上性能问题排查命令Java高CPU、高内存、IO瓶颈定位Java服务线上CPU飙升、内存溢出、接口卡顿90%的性能问题都能通过这部分命令定位根因配合JVM工具可直接找到问题代码行。4.1 系统整体资源监控top 命令底层逻辑top命令通过读取/proc/stat、/proc/meminfo、/proc//stat等虚拟文件实时获取系统的CPU、内存、进程运行状态是性能排查的入口命令。 Java高频必用用法# 查看系统整体资源使用情况所有进程的CPU、内存占用默认按CPU占用倒序 top # 只查看指定Java进程的资源使用情况精准监控 top -p 12345 # 查看Java进程下所有线程的CPU占用情况定位高CPU的线程核心用法 top -Hp 12345top输出核心指标解读Java开发必懂%Cpu(s)CPU整体使用率us是用户态CPU占比Java代码执行消耗高CPU故障通常us值极高sy是内核态CPU占比id是空闲CPU占比。KiB Mem内存使用情况total是总物理内存used是已用内存free是完全空闲内存buff/cache是页缓存。KiB Swap交换分区使用情况Swap占用持续升高说明物理内存不足JVM会频繁GC导致服务严重卡顿。进程列表PID是进程ID%CPU是进程CPU占用率%MEM是进程内存占用率TIME是进程累计CPU运行时间。Java高CPU问题排查标准流程100%可落地这是Java开发线上最常遇到的故障完整流程配合流程图可直接落地执行flowchart TD A[线上Java服务CPU飙升告警] -- B[执行top命令找到CPU占用最高的Java进程PID] B -- C[执行top -Hp PID找到CPU占用最高的线程TID] C -- D[执行printf %x\n TID将十进制线程ID转为16进制] D -- E[执行jstack PID | grep 16进制TID -A 30获取线程完整栈信息] E -- F[定位到耗CPU的Java代码行分析根因]完整实例演示执行top命令找到CPU占用90%的Java进程PID12345执行top -Hp 12345找到CPU占用80%的线程TID12346将十进制线程ID转为16进制printf %x\n 12346 # 输出303a查看线程栈信息定位问题代码jstack 12345 | grep 303a -A 30输出结果会直接显示线程名称、线程状态、对应的Java代码行号可快速定位死循环、频繁GC、Full GC等根因。4.2 内存监控free 命令底层逻辑free命令读取/proc/meminfo文件获取系统物理内存、交换分区的使用情况是排查Java服务OOM、内存不足问题的核心命令。 Java高频用法# 以人类可读的格式GB/MB查看内存使用情况 free -h # 持续监控内存变化每2秒输出一次 free -h -s 2输出核心指标解读total used free shared buff/cache available Mem: 15Gi 8.2Gi 2.1Gi 251Mi 5.2Gi 6.8Gi Swap: 15Gi 0B 15Gitotal总物理内存used已使用的内存包括进程、内核、缓存占用free完全空闲的内存available真正可用的内存包括空闲内存可回收的缓存Java服务能使用的最大内存看available不是free。 ⚠️ 避坑点Linux会用空闲内存做文件缓存所以free值低不代表内存不足available值低才是真正的内存不足。Java服务OOM优先看available是否充足JVM堆内存设置是否超过可用物理内存。4.3 磁盘监控df、du 命令Java开发最常遇到的磁盘问题日志文件、dump文件占满磁盘导致服务无法写入日志、OOM无法生成dump文件、数据库写入失败这两个命令可快速定位问题。df 命令查看磁盘整体使用情况底层逻辑df命令通过读取文件系统的超级块信息获取磁盘分区的总容量、已用容量、剩余容量、挂载点。 Java高频用法# 以人类可读的格式查看所有磁盘分区的使用情况 df -h # 查看磁盘inode使用情况排查inode占满导致无法创建文件的问题 df -i⚠️ 经典问题磁盘还有剩余空间但无法创建文件。根因是inode数量耗尽通常是大量小文件导致用df -i 查看若inode使用率100%删除无用的小文件即可恢复。du 命令查看文件/目录的磁盘占用大小底层逻辑du命令递归统计目录下所有文件的磁盘块占用大小找到占用磁盘空间最大的文件/目录。 Java高频必用用法# 查看当前目录下所有一级子目录的大小按GB/MB显示 du -h --max-depth1 # 查找当前目录下最大的10个文件快速定位大日志、dump文件 du -ah . | sort -nr | head -10 # 查看指定目录的总大小比如日志目录 du -sh /usr/local/app/logs⚠️ 易混淆点明确区分df和du的核心区别df看磁盘分区的整体使用情况统计的是文件系统的块占用包括被进程占用但已删除的文件。du看文件/目录的实际大小统计的是存在的文件的大小不包括已删除但被进程占用的文件。经典场景du统计的总大小远小于df的已用大小根因是有大文件被删除但被Java进程占用内核没有释放磁盘块用lsof | grep deleted 找到对应的进程重启即可释放空间。4.4 系统负载与IO监控vmstat、iostat 命令Java服务接口卡顿CPU和内存都正常大概率是磁盘IO或网络IO瓶颈这两个命令可直接定位根因。vmstat 命令系统整体负载、CPU、内存、IO、上下文切换监控底层逻辑vmstat命令读取内核的/proc/stat、/proc/vmstat等虚拟文件实时输出系统的进程状态、CPU使用率、内存使用、磁盘IO、系统中断、上下文切换等指标是排查系统瓶颈的全能工具。 Java高频用法# 每1秒输出一次监控数据持续输出 vmstat 1 # 每2秒输出一次总共输出10次 vmstat 2 10输出核心指标解读Java开发必懂procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 0 2154320 123456 5432100 0 0 0 10 100 200 30 5 60 5 0procsr是等待运行的进程数CPU就绪队列长度r值长期大于CPU核心数说明CPU资源不足是CPU瓶颈的核心指标b是阻塞的进程数。swapsi是从交换分区读入内存的大小so是写入交换分区的大小。si/so持续大于0说明物理内存不足频繁使用交换分区JVM会严重卡顿。iobi是从磁盘读入的块数bo是写入磁盘的块数。bi/bo持续很高说明磁盘IO瓶颈。cpuwa是等待IO的CPU时间占比wa持续大于30%说明磁盘IO严重瓶颈Java服务会因为等待磁盘写入日志、数据库导致接口卡顿。systemin是中断次数cs是上下文切换次数。cs持续很高说明线程频繁切换通常是Java服务线程池设置过大导致频繁上下文切换消耗CPU。iostat 命令磁盘IO详细监控底层逻辑iostat命令读取内核的/proc/diskstats文件获取磁盘的读写速度、IOPS、等待时间、利用率等详细指标精准定位磁盘IO瓶颈需要安装sysstat最新稳定版。 Java高频用法# 安装最新稳定版sysstat yum install -y sysstat # 查看所有磁盘的IO详细情况每1秒输出一次 iostat -x 1 # 查看指定磁盘的IO情况比如vda系统盘 iostat -x /dev/vda 1核心指标解读%util磁盘的利用率持续大于90%说明磁盘已经满负载运行IO严重瓶颈。rMB/s、wMB/s磁盘的每秒读、写速度判断是否达到磁盘的物理上限。r/s、w/s磁盘的每秒读、写IOPS判断是否达到磁盘的IOPS上限。awaitIO请求的平均等待时间包括队列时间和服务时间持续大于50ms说明磁盘IO响应慢。4.5 实时进程监控htop 命令top的增强版更直观htop是top的增强版支持彩色显示、鼠标操作、横向滚动、进程树展示界面更直观功能更强大最新稳定版3.3.0。 Java高频用法# 安装最新稳定版htop yum install -y htop # 启动htop htop # 只查看Java进程 htop -p $(pgrep java)五、文件传输与环境部署命令Java服务环境搭建、包传输必备Java服务部署需要传输jar包、安装JDK、下载依赖包、解压安装包这部分命令是环境搭建的基础所有实例均基于最新稳定版组件。5.1 文件压缩与解压tar、unzip、zip 命令Java开发最常用的压缩格式是tar.gz、zip比如JDK安装包、项目压缩包、日志归档这部分只讲最常用的正确用法。tar 命令tar.gz/tar.bz2格式压缩与解压最常用底层逻辑tar是归档工具配合gzip/bzip2压缩算法实现文件的打包与压缩是Linux下最常用的压缩格式。 Java高频必用用法100%正确# 解压JDK tar.gz安装包基于最新LTS版本JDK25 tar -zxvf jdk-25_linux-x64_bin.tar.gz # 解压tar.bz2格式的安装包 tar -jxvf jdk-25_linux-x64_bin.tar.bz2 # 将Java项目目录打包压缩为tar.gz包用于备份 tar -zcvf app-backup.20260304.tar.gz /usr/local/app/ # 只解压tar.gz包中的指定文件比如解压配置文件 tar -zxvf app-backup.tar.gz ./app/config/application.yml # 查看tar.gz包中的文件列表不解压 tar -ztvf app-backup.tar.gz必用参数说明-z用gzip压缩/解压对应tar.gz格式-j用bzip2压缩/解压对应tar.bz2格式-x解压-c压缩打包-v显示详细过程-f指定文件名必须放在最后一个参数zip/unzip 命令zip格式压缩与解压和Windows系统兼容Java高频用法# 解压zip格式的项目包 unzip app-project.zip # 解压到指定目录 unzip app-project.zip -d /usr/local/app/ # 查看zip包中的文件列表不解压 unzip -l app-project.zip # 将目录打包为zip包 zip -r app-backup.zip /usr/local/app/5.2 文件传输scp、rz/sz 命令Java开发需要在本地和服务器之间传输jar包、配置文件、dump文件这两个命令是最常用的传输工具。scp 命令基于SSH的安全文件传输跨服务器传输首选底层逻辑scp基于SSH协议加密传输文件安全可靠支持本地和服务器之间、服务器和服务器之间的文件传输。 Java高频必用用法100%可运行# 本地文件上传到服务器将本地的app.jar上传到服务器的/usr/local/app/目录 scp app.jar root192.168.1.100:/usr/local/app/ # 服务器文件下载到本地将服务器的dump文件下载到本地 scp root192.168.1.100:/usr/local/app/dump/java_pid12345.hprof ./ # 递归上传整个配置目录到服务器 scp -r ./config root192.168.1.100:/usr/local/app/ # 递归下载服务器的整个日志目录到本地 scp -r root192.168.1.100:/usr/local/app/logs ./rz/sz 命令Xshell/CRT终端直接传输小文件首选基于Zmodem协议直接在终端拖拽上传下载适合小文件快速传输无需记住IP地址。 Java高频用法# 安装lrzsz最新稳定版 yum install -y lrzsz # 上传文件执行rz命令弹出文件选择框选择本地文件上传 rz # 上传文件覆盖已存在的同名文件 rz -y # 下载文件将服务器的app.log下载到本地 sz app.log5.3 文件下载与接口测试wget、curl 命令Java开发需要下载JDK、maven、第三方依赖包同时需要测试Java服务接口是否正常这两个命令是必备工具。wget 命令文件下载神器Java高频用法# 下载JDK25最新LTS版本安装包 wget https://download.oracle.com/java/25/latest/jdk-25_linux-x64_bin.tar.gz # 断点续传下载大文件比如大体积dump文件 wget -c https://example.com/large-file.tar.gz # 下载文件到指定目录并重命名 wget -O /usr/local/jdk.tar.gz https://download.oracle.com/java/25/latest/jdk-25_linux-x64_bin.tar.gz # 后台下载大文件 wget -b https://example.com/large-file.tar.gzcurl 命令网络请求与文件下载Java接口测试首选底层逻辑curl支持HTTP/HTTPS/FTP等多种协议不仅能下载文件还能模拟各种HTTP请求测试Java服务的接口健康状态、功能是否正常是Java开发线上测试接口的首选工具。 Java高频必用用法# 测试Java服务的健康检查接口验证服务是否正常启动 curl http://localhost:8080/actuator/health # 模拟GET请求带请求头和查询参数 curl -H Content-Type: application/json -H token: 123456 http://localhost:8080/api/order?orderId123456 # 模拟POST请求提交JSON数据测试接口功能 curl -X POST -H Content-Type: application/json -d {orderId:123456,userId:789,amount:100} http://localhost:8080/api/order/create # 下载文件 curl -O https://download.oracle.com/java/25/latest/jdk-25_linux-x64_bin.tar.gz # 查看接口的完整响应头排查重定向、跨域问题 curl -I http://localhost:8080/api/order六、进阶必杀命令解决Java线上疑难杂症这部分命令是Java开发的进阶技能能解决线上遇到的疑难问题比如文件句柄超限、批量操作、实时监控、资源限制等全是生产环境验证过的实用用法。6.1 find 命令文件查找神器底层逻辑find命令递归遍历目录根据文件名、大小、修改时间、权限等条件查找文件支持对找到的文件执行批量操作是查找日志、dump文件、配置文件的核心工具。 Java高频必用用法# 查找当前目录下所有的.log日志文件 find ./ -name *.log # 查找7天前的日志文件用于归档或删除 find /usr/local/app/logs -mtime 7 -name *.log # 查找大于1GB的文件快速定位大日志、dump文件 find ./ -size 1G # 查找所有的Java进程dump文件忽略权限报错 find / -name java_pid*.hprof 2/dev/null # 查找7天前的日志文件批量删除安全可靠比rm -rf 安全 find /usr/local/app/logs/archive -mtime 7 -name *.log -delete # 查找所有的jar包批量修改权限 find ./ -name *.jar -exec chmod 755 {} \;6.2 xargs 命令参数传递神器批量操作必备底层逻辑xargs将标准输入转换为命令行参数传递给其他命令和find、grep、ps等命令配合实现批量操作是Linux批量处理的核心工具。 Java高频用法# 查找所有的.log文件批量压缩 find ./ -name *.log | xargs gzip # 批量停止指定的Java进程 ps -ef | grep demo-app | grep -v grep | awk {print $2} | xargs kill -15 # 查找所有7天前的日志文件批量移动到归档目录 find ./logs -mtime 7 -name *.log | xargs mv -t ./logs/archive/ # 批量删除所有的.java.bak备份文件 find ./ -name *.java.bak | xargs rm -f6.3 ulimit 命令解决JavaToo many open files异常底层逻辑ulimit是Linux内置的资源限制命令用于限制shell启动进程的资源占用包括最大打开文件数、最大进程数、最大栈大小等。Java服务需要打开大量的jar包、类文件、socket连接、日志文件Linux默认的最大打开文件数1024远远不够会导致Too many open files异常服务宕机。 Java高频必用用法# 查看当前用户的所有资源限制 ulimit -a # 查看最大打开文件数open files ulimit -n # 临时修改最大打开文件数为65535重启终端后失效 ulimit -n 65535永久修改方法企业级标准配置100%正确 修改/etc/security/limits.conf文件添加以下配置# 所有用户的软、硬最大打开文件数设置为65535 * soft nofile 65535 * hard nofile 65535 # 所有用户的软、硬最大进程数设置为65535 * soft nproc 65535 * hard nproc 65535⚠️ 核心说明soft软限制警告值用户可以超过该值会收到警告。hard硬限制最大值用户绝对不能超过该值只有root用户可以修改。*代表所有用户也可以指定具体的服务运行用户比如app用户。修改完成后需要重新登录终端生效无需重启服务器。6.4 watch 命令实时监控命令执行结果底层逻辑watch命令周期性执行指定的命令全屏输出结果实时监控数据变化适合监控Java进程状态、日志增长、磁盘空间变化、连接数变化。 Java高频用法# 每2秒监控一次Java进程的运行状态 watch -n 2 ps -ef | grep java # 每1秒监控一次磁盘空间变化看日志是否持续占满磁盘 watch -n 1 df -h # 每2秒监控一次Java进程的TCP连接数排查连接泄露 watch -n 2 ss -tanp | grep java | wc -l # 高亮显示变化的内容更直观 watch -d -n 1 free -h6.5 tee 命令输出分流同时保存到文件和终端底层逻辑tee命令将标准输入复制到标准输出同时写入到指定文件适合Java服务启动时既要在终端看到输出又要保存到日志文件也可用于命令执行结果的备份。 Java高频用法# 启动Java服务同时在终端显示输出保存到app.log文件 java -jar app.jar | tee app.log # 追加写入到文件不覆盖原有内容 java -jar app.jar | tee -a app.log # 执行curl测试接口同时在终端显示响应保存到response.txt curl http://localhost:8080/api/order | tee response.txt七、Java开发高频踩坑避坑指南易混淆命令与红线规则很多线上故障都是因为对命令的理解不到位踩了认知盲区的坑这部分明确区分易混淆的命令划清生产环境红线避免踩坑引发故障。7.1 易混淆命令明确区分命令组合正确含义错误用法的坑kill -15 vs kill -9kill -15是优雅停机触发JVM shutdown hookkill -9是强制终止无清理动作线上直接kill -9导致数据不一致、事务未提交、文件损坏tail -f vs tail -Ftail -f监听文件描述符日志切割后失效tail -F监听文件名切割后自动重新打开日志切割后tail -f看不到新日志误以为服务停止运行 app.log 21 vs 21 app.log前者将标准输出和错误都重定向到app.log后者标准错误输出到终端标准输出到文件顺序写反异常信息没有写入日志文件排查问题找不到异常栈du vs dfdu统计文件实际大小df统计磁盘分区的块占用包括已删除但被进程占用的文件磁盘满了du找不到大文件误以为是系统故障实际是进程占用已删除文件netstat vs ssnetstat遍历/proc下的所有进程目录性能差ss直接读取内核tcp_diag模块性能极强系统有大量TCP连接时用netstat导致命令卡死甚至服务器负载升高7.2 Java开发Linux命令红线规则生产环境严禁触碰严禁在生产环境执行rm -rf / 、rm -rf * 等高危删除命令删除前必须先用ls确认路径优先用find -delete 批量删除更安全可控。生产环境Java服务优先用kill -15优雅停机严禁上来就kill -9仅当服务完全卡死无法响应时才使用kill -9。严禁用root用户运行Java服务必须用普通用户运行避免权限过高导致安全问题和误操作故障。严禁在生产环境直接修改配置文件修改前必须备份避免修改错误导致服务无法启动。严禁在生产环境执行未经测试的命令、脚本必须先在测试环境验证通过。严禁随意修改系统内核参数、ulimit配置修改前必须评估影响做好备份。八、总结本文聚焦Java开发全生命周期的高频Linux命令按真实业务场景分类讲透了每个命令的底层逻辑、正确用法、实战实例、避坑指南所有命令和实例均经过生产环境验证100%可直接运行。 对于Java开发者而言Linux命令不是运维的专属技能而是线上问题排查、服务部署、性能调优的核心能力。掌握这些命令你就能在面对线上问题时从容不迫快速定位根因解决问题真正做到从代码开发到线上运维的全栈能力覆盖。 建议收藏本文线上遇到问题时可随时查阅对应命令的用法快速解决问题。

相关新闻

Python流程控制

Python流程控制

流程控制是Python编程的核心,用于控制代码的执行顺序,主要分为三大类:条件判断(分支结构)、循环结构、跳转语句,以下是详细知识点梳理,搭配实例便于理解和应用。一、条件判断(if-eli…

2026/7/5 23:29:34 阅读更多 →
黑客找不到的门才最安全

黑客找不到的门才最安全

前面我们已经筑好了数据的“防波堤”,今天我们就来给网站的大门换一把“隐形的锁”。 在网络安全界,有一条准则叫做**“隐蔽即安全”**。ThinkCMF 默认的后台地址是 yoursite.com/admin,这就像是告诉全世界的黑客:“嘿&#xff0c…

2026/7/4 0:41:58 阅读更多 →
可靠的PCB打样公司

可靠的PCB打样公司

一、PCB电路板基础概述PCB定义与分类印制电路板(Printed Circuit Board,简称PCB)是电子设备中不可或缺的基础组件,用于连接和支撑各种电子元件。根据层数和结构的不同,PCB可以分为单面板、双面板、多层板、高频板和HDI…

2026/7/5 15:08:45 阅读更多 →

最新新闻

AI模型Web服务安全加固实战:从CSRF/XSS防护到生产部署

AI模型Web服务安全加固实战:从CSRF/XSS防护到生产部署

1. 项目概述:当AI视觉模型遇上Web安全最近在部署一个基于OFA(One-For-All)的图像语义蕴含模型服务时,我遇到了一个非常典型但又容易被忽视的问题:我们往往把绝大部分精力都花在了模型调优、接口性能优化上,…

2026/7/5 23:29:06 阅读更多 →
视频嵌入表示技术:从3D CNN到Transformer的实践指南

视频嵌入表示技术:从3D CNN到Transformer的实践指南

1. 视频嵌入表示生成方案概述视频嵌入表示(Video Embedding)是计算机视觉领域将原始视频数据转化为低维稠密向量的关键技术。不同于传统视频处理直接操作像素数据,嵌入表示通过深度学习模型提取视频的语义特征,形成固定长度的向量…

2026/7/5 23:29:06 阅读更多 →
GPT-4o与Claude 3.5 Sonnet模型选型实战指南

GPT-4o与Claude 3.5 Sonnet模型选型实战指南

该项目标题存在严重事实性错误与误导风险,不符合内容安全与专业规范要求。根据公开、权威、可验证的官方信息渠道(OpenAI官网、主流科技媒体如The Verge、TechCrunch、MIT Technology Review等2024年至今的持续追踪报道),截至目前…

2026/7/5 23:29:06 阅读更多 →
DC-DC降压转换器设计与PID控制优化实践

DC-DC降压转换器设计与PID控制优化实践

1. 项目背景与核心器件选型解析在电力电子领域,DC-DC降压转换器(Buck Converter)是最基础也最关键的拓扑结构之一。这次我们要实现的方案采用了171010550电源管理IC与PIC18F97J60微控制器的组合,这个搭配在工业控制领域颇具代表性…

2026/7/5 23:25:05 阅读更多 →
AutoUnipus:U校园全自动答题工具终极指南

AutoUnipus:U校园全自动答题工具终极指南

AutoUnipus:U校园全自动答题工具终极指南 【免费下载链接】AutoUnipus U校园脚本,支持全自动答题,百分百正确 2024最新版 项目地址: https://gitcode.com/gh_mirrors/au/AutoUnipus 面对繁重的在线学习任务,你是否还在为U校园平台的网课作业而烦恼…

2026/7/5 23:23:04 阅读更多 →
XXE漏洞深度解析:从XML外部实体注入原理到实战防御

XXE漏洞深度解析:从XML外部实体注入原理到实战防御

1. 项目概述:为什么XXE漏洞至今仍是“隐形杀手”?在Web安全领域,SQL注入、XSS这些名词大家耳熟能详,但提到XXE(XML External Entity Injection,XML外部实体注入),很多开发者甚至安全…

2026/7/5 23:19:03 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻