sns社交网站/网络推广哪个平台最好
一,前提准备
最基本前提:你需要有liunx环境,如果没有请参考其它文献在自己得到local建立一个虚拟机去进行测试。
有了虚拟机之后,你还需要安装jdk和配置环境变量
1. 安装JDK(以OpenJDK 17为例)
下载JDK
# 进入用户主目录
cd ~# 下载OpenJDK 17(以.tar.gz包为例)
wget https://download.java.net/java/GA/jdk17.0.2/dfd4a8d0985749f896bed50d7138ee7f/8/GPL/openjdk-17.0.2_linux-x64_bin.tar.gz# 或Oracle JDK(需官网同意许可协议)
# wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
这里就已经下好了
解压并安装
# 创建安装目录(需sudo权限)
sudo mkdir -p /usr/local/java# 解压JDK到目标目录
sudo tar -xzvf openjdk-17.0.2_linux-x64_bin.tar.gz -C /usr/local/java# 查看解压后的目录名(例如jdk-17.0.2)
ls /usr/local/java
命令解释
mkdir -p /path/to/directory
- 递归创建目录:当你指定的路径中某些目录不存在时,
mkdir -p
会自动创建这些缺失的父目录。 - 不会报错:如果目录已经存在,
mkdir -p
不会报错,命令会正常执行。
tar -xzvf openjdk-17.0.2_linux-x64_bin.tar.gz -C /usr/local/java
tar -xzvf
是用来解压 .tar.gz
或 .tgz
文件的命令。
x
:表示 解压(extract)。z
:表示 通过 gzip 压缩格式进行解压(unzip the gzip file)。v
:表示 显示详细信息,在解压时列出文件名。这个选项是可选的,用来查看解压过程中有哪些文件被处理。f
:表示 指定文件,后面需要跟要解压的.tar.gz
文件名。
2, 配置环境变量
编辑环境变量文件
# 打开用户环境变量配置文件(以bash为例)
nano ~/.bashrc # 或 ~/.bash_profile、~/.zshrc(根据Shell类型)
命令解释
nano
:是一个命令行下的文本编辑器。它非常简单,适合快速编辑文件。~/.bashrc
:是当前用户主目录下的 Bash 配置文件。每当你打开一个新的终端时,Bash shell 会加载该文件。在这个文件中,你可以设置环境变量、命令别名、shell 提示符样式等。
添加以下内容到文件末尾
需要注意,不能有空格
# 手动安装配置
export JAVA_HOME=/usr/local/java/jdk-17.0.2 # 替换为实际解压路径
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar# 包管理器安装配置(若使用方式2)
# export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
# export PATH=$JAVA_HOME/bin:$PATH
使配置生效
source ~/.bashrc # 根据实际配置文件选择
验证安装
# 检查Java版本
java -version# 输出应类似:
openjdk version "17.0.2" 2022-01-18
OpenJDK Runtime Environment (build 17.0.2+8-86)
OpenJDK 64-Bit Server VM (build 17.0.2+8-86, mixed mode)# 检查JAVA_HOME
echo $JAVA_HOME
# 输出:/usr/local/java/jdk-17.0.2
自动化脚本安装示例:
#!/bin/bash
# 一键安装并配置JDK 17(手动方式)
JDK_URL="https://download.java.net/java/GA/jdk17.0.2/dfd4a8d0985749f896bed50d7138ee7f/8/GPL/openjdk-17.0.2_linux-x64_bin.tar.gz"
INSTALL_DIR="/usr/local/java"# 下载并解压
sudo mkdir -p $INSTALL_DIR
wget $JDK_URL -O /tmp/jdk17.tar.gz
sudo tar -xzvf /tmp/jdk17.tar.gz -C $INSTALL_DIR# 配置环境变量
echo "export JAVA_HOME=$INSTALL_DIR/$(ls $INSTALL_DIR)" >> ~/.bashrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc# 验证
java -version
二,Java代码准备
编写一个简单的让程序不断创建新对象,然后GC在不停地回收,但是又回收不掉地样例。并打包为jar包给到我们的liunx服务器。
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;public class Main {// 内存泄漏:让对象无法被GC回收private static final List<byte[]> LEAK_LIST = new ArrayList<>();// CPU密集型任务开关private static final AtomicBoolean RUNNING = new AtomicBoolean(true);public static void main(String[] args) {// 内存泄漏线程:持续分配内存,触发频繁GCnew Thread(() -> {while (true) {// 每次分配1MB内存(不会被回收)LEAK_LIST.add(new byte[1024 * 1024]);try {Thread.sleep(100); // 控制内存分配速度} catch (InterruptedException e) {e.printStackTrace();}}}, "MemoryLeakThread").start();// CPU密集型线程:死循环计算,占用CPUnew Thread(() -> {while (RUNNING.get()) {// 无意义但耗CPU的计算double result = 0;for (int i = 0; i < 100000; i++) {result += Math.sin(i) * Math.cos(i);}}}, "CpuIntensiveThread").start();}
}
打包为可执行jar包
将jar包给到linux
这里我用的vmware的文件共享区进行的共享的。
在虚拟机的设置里面
在选项这里进行配置一下
vmware的文件共享区在Linux中的/mnt/hgfs/ 文件下
如果/mnt/hgfs
目录为空
-
可能原因:
-
VMware Tools未正确安装。
-
共享文件夹未启用或配置错误。
-
自动挂载服务未运行。
-
解决方案:
步骤1:检查VMware Tools状态
# 查看服务是否运行(Ubuntu/Debian)
systemctl status vmware-tools.service# 重启服务(如果未运行)
sudo systemctl restart vmware-tools.service如果未安装 VMware Tools则
# 检查 open-vm-tools 状态
systemctl status open-vm-tools
# 若服务存在且未运行,
启动服务
sudo systemctl start open-vm-tools
sudo systemctl enable open-vm-tools
步骤2:手动挂载共享文件夹(临时生效)
# 创建挂载点(若目录不存在)
sudo mkdir -p /mnt/hgfs# 手动挂载
sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other#如果因为权限不足,可以加权限
sudo usermod -aG root rojer(rojer是用户名)
步骤3:配置开机自动挂载(永久生效)
# 编辑/etc/fstab文件
sudo nano /etc/fstab# 添加以下行(保存退出)
.host:/ /mnt/hgfs fuse.vmhgfs-fuse allow_other,defaults 0 0# 重新挂载
sudo mount -a
准备调试工具
使用阿里的arthas
arthas/README_CN.md at master · alibaba/arthas · GitHub
下载 Arthas 的 arthas-boot.jar
文件
curl -O https://arthas.aliyun.com/arthas-boot.jar
三,开始测试
使用以下JVM参数启动程序,加速问题暴露(JDK1.8版本):
java -Xms100m -Xmx100m # 限制堆内存为100MB,加速GC触发
-XX:+UseG1GC # 使用G1垃圾回收器(观察GC日志)
-XX:+PrintGCDetails # 打印GC详细信息
-XX:+PrintGCDateStamps # 显示GC时间戳-jar
GcDemo.jarJava 9 及以上改用
-Xlog:gc
java -Xms100m -Xmx100m -XX:+UseG1GC -Xlog:gc -jar GCdemo.jar
启动之后问题出现
现象验证方法
观察GC频繁:
1,使用ps -ef | grep java
找到java进程的pid
2,通过top命令观察java进程的实时状态
2,使用 jstat -gc <pid> 1000(每秒刷新):
观察GC回收状况,从上面命令可以看出内存资源并不紧张,所以这里只做展示
YGC(Young GC次数)和 FGC(Full GC次数)会快速上升。
从上面可以看出fullGC的次数才3次,且回收时间不大,说明内存情况很健康。又从top中看到cpu资源已经打满,说明有程序在疯狂占用cpu的计算资源。
这里解释一下上图的代表意思
|
详细观察cpu的占用情况
top -p <pid>
然后 按 H
键(大写的 H)切换到线程视图:
- 按下
H
键后,top
会从显示进程列表切换到显示线程列表,每个线程会显示为一个单独的条目。
使用Arthas诊断:
# 1. 启动Arthas
java -jar arthas-boot.jar
这里选择所要监控的程序。
需要注意,如果出现连接异常,且
~/logs/arthas/arthas.log
路径下log中有
Arthas server agent start...
java.lang.OutOfMemoryError: Java heap space
说明你当前的机器在不断消耗内存,导致arthas起不起来!
因为在jvm初始化的时候,这个阶段非常吃内存。
查看线程CPU占用
# 当前系统的实时数据面板,按 ctrl+c 退出。
dashboard
这里可以看出cpu已经打满,但是堆内存情况良好。
追踪高cpu线程
thread
参数名称 参数说明 id 线程 id [n:] 指定最忙的前 N 个线程并打印堆栈 [b] 找出当前阻塞其他线程的线程 [i <value>
]指定 cpu 使用率统计的采样间隔,单位为毫秒,默认值为 200 [--all] 显示所有匹配的线程
这里就已经能定位到问题了。我这个样例比较简单,就一个main类。大家可以构建复杂一点的项目,进行一点点调试看问题。
使用java原生的也能定位到问题。可能比较繁琐一点。
使用 jstack
获取线程堆栈信息
使用 jvisualvm
进行图形化分析
等等。
其它arthas常用方法
- trace:追踪方法调用的堆栈,帮助你查看方法内部的执行情况。
- monitor:监控方法的执行,特别是性能问题,像慢方法。
- stack:查看线程堆栈,特别是线程阻塞和死锁问题。
- watch:监控方法调用,查看参数和返回值,帮助定位参数错误。
- heapdump:生成堆转储文件,帮助分析内存问题。
- jstack:查看 Java 进程的堆栈信息,诊断崩溃或线程死锁。
参考官方文档使用说明!
auth | arthas
相关文章:

从0开始,来看看怎么去linux排查Java程序故障
一,前提准备 最基本前提:你需要有liunx环境,如果没有请参考其它文献在自己得到local建立一个虚拟机去进行测试。 有了虚拟机之后,你还需要安装jdk和配置环境变量 1. 安装JDK(以OpenJDK 17为例) 下载JDK…...

DeepSeek-V3:开源多模态大模型的突破与未来
目录 引言 一、DeepSeek-V3 的概述 1.1 什么是 DeepSeek-V3? 1.2 DeepSeek-V3 的定位 二、DeepSeek-V3 的核心特性 2.1 多模态能力 2.2 开源与可扩展性 2.3 高性能与高效训练 2.4 多语言支持 2.5 安全与伦理 三、DeepSeek-V3 的技术架构 3.1 模型架构 3…...

Deep Sleep 96小时:一场没有硝烟的科技保卫战
2025年1月28日凌晨3点,当大多数人还沉浸在梦乡时,一场没有硝烟的战争悄然打响。代号“Deep Sleep”的服务器突遭海量数据洪流冲击,警报声响彻机房,一场针对中国关键信息基础设施的网络攻击来势汹汹! 面对美国发起的这场…...

Redis地理散列GeoHash
GeoHash是一种用于地理位置编码的算法,将二维的地理坐标(纬度和经度)转换为一维的字符串表示,从而实现对地理位置的高效存储和查询。Redis作为一个内存数据库,提供了对GeoHash的支持,使得地理位置相关的数据…...

JAVA安全—反射机制攻击链类对象成员变量方法构造方法
前言 还是JAVA安全,哎,真的讲不完,太多啦。 今天主要是讲一下JAVA中的反射机制,因为反序列化的利用基本都是要用到这个反射机制,还有一些攻击链条的构造,也会用到,所以就讲一下。 什么是反射…...

专业学习|一文了解并实操自适应大邻域搜索(讲解代码)
一、自适应大邻域搜索概念介绍 自适应大邻域搜索(Adaptive Large Neighborhood Search,ALNS)是一种用于解决组合优化问题的元启发式算法。以下是关于它的详细介绍: -自适应大领域搜索的核心思想是:破坏解、修复解、动…...

9. k8s二进制集群之kube-controller-manager部署
同样在部署主机上创建证书请求文件(为之后的证书生成做准备)根据上面的证书文件创建证书(结果会在当前目录下产生kube-controller-manager证书)创建kube-controller-manager服务配置文件创建kube-controller-manager服务启动文件同步kube-controller-manager证书到对应mast…...

轮转数组-三次逆置
题目 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 void rotate(int* nums, int numsSize, int k){}示例: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] …...

3 卷积神经网络CNN
1 Image Classification (Neuron Version) – 1.1 Observation 1 1.2 Observation 2 如果不同的receptive field需要相同功能的neuron,可以使这些neuron共享参数 1.3 Benefit of Convolutional Layer 2 Image Classification (Filter Version) 不用担心filter大小…...

穷举vs暴搜vs深搜vs回溯vs剪枝系列一>黄金矿工
目录 决策树:代码设计代码: 决策树: 代码设计 代码: class Solution {boolean[][] vis;int ret,m,n;public int getMaximumGold(int[][] grid) {m grid.length;n grid[0].length;vis new boolean[m][n]; for(int i 0; i <…...

java基础1(黑马)
一、初识Java 1.Java背景知识 1)Java是美国SUN公司在1995年推出的一门计算机高级编程语言。 2)Java早期名称为OAK,后来才改为Java。 3)Java之父:詹姆斯高斯林。 4)2009年,SUN公司被Oracle公…...

ES6 对象扩展:对象简写,对象属性 表达式,扩展运算符 ...,Object.assign,Object.is,用法和应用场景
1. 对象属性简写 1.1 基本语法 // 传统写法 const name John; const age 25; const user {name: name,age: age };// ES6 简写语法 const user {name,age };1.2 实际应用场景 // 1. 函数返回对象 function createUser(name, age, email) {return {name,age,email}; }// …...

2025 持续防范 GitHub 投毒,通过 Sharp4SuoExplorer 分析 Visual Studio 隐藏文件
在2024年底的网络安全事件中,某提权工具被发现植入后门,攻击者利用 .suo 文件作为隐蔽的攻击方式。由于 .suo 文件是 Visual Studio 项目的隐藏配置文件,通常不为安全研究人员所关注,因此为攻击者提供了潜在的攻击渠道。 初步调查…...

PCB走线宽度与过流能力参考
我们PCB走线,线宽与允许通过电流的大小是什么样的?几个因素 1、允许的温升:如果能够允许的铜线升高的温度越高,那么允许通过的电流自然也就越高 2、走线的线宽:线越宽 ,导线横截面积越大,电阻…...

电商项目-分布式事务(四)基于消息队列实现分布式事务
基于消息队列实现分布式事务,实现消息最终一致性 如何基于消息队列实现分布式事务? 通过消息队列实现分布式事务的话,可以保证当前数据的最终一致性。实现思路:将大的分布式事务,进行拆分,拆分成若干个小…...

g++ -> make -> cmake(草稿)
1 Windows上安装mingw 2 构建一个 c 项目 3 g 编译 4 make 编译 5 cmake 编译...

JSON常用的工具方法
前言: 在日常开发中,JSON 数据的处理是常见的需求。无论是数据转换、格式化还是与其他格式的互转,掌握一些常用的工具方法可以大大提高开发效率。本文将介绍一些实用的 JSON 操作方法,帮助你快速上手。 JSON常用的工具方法 1.json字符串转换…...

【Kubernetes Pod间通信-第2篇】使用BGP实现Pod到Pod的通信
Kubernetes中Pod间的通信 本系列文章共3篇: 【Kubernetes Pod间通信-第1篇】在单个子网中使用underlay网络实现Pod到Pod的通信【Kubernetes Pod间通信-第2篇】使用BGP实现Pod到Pod的通信(本文介绍)【Kubernetes Pod间通信-第3篇】Kubernetes中Pod与ClusterIP服务之间的通信…...

[权限提升] Windows 提权 维持 — 系统错误配置提权 - Trusted Service Paths 提权
关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01:Trusted Service Paths 提权原理 Windows 的服务通常都是以 System 权限运行的,所以系统在解析服务的可执行文件路径中的空格的时候也会以 System 权限进行解析&a…...

8. k8s二进制集群之Kubectl部署
创建kubectl证书请求文件生成admin证书文件复制admin证书到指定目录生成kubeconfig配置文件接下来完成kubectl配置文件的角色绑定【扩展】kubectl命令补全操作继续上一篇文章《k8s二进制集群之Kube ApiServer部署》下面介绍一下k8s中的命令行管理工具kubectl。 通过kubectl可以…...

初学 Xvisor 之理解并跑通 Demo
官网:https://www.xhypervisor.org/ quick-start 文档:https://github.com/xvisor/xvisor/blob/master/docs/riscv/riscv64-qemu.txt 零、Xvisor 介绍 下面这部分是 Xvisor 官方的介绍 Xvisor 是一款开源的 Type-1 虚拟机管理程序,旨在提供一…...

深度内容运营与开源AI智能名片2+1链动模式S2B2C商城小程序在打造种草社区中的应用研究
摘要:移动互联网的迅猛发展极大地改变了消费者的购物行为和消费习惯,传统的购物体验已难以满足用户日益增长的个性化需求。在这种背景下,深度内容运营和实时互动成为提升用户购物体验、影响用户购物行为的重要手段。同时,开源AI智…...

RNN/LSTM/GRU 学习笔记
文章目录 RNN/LSTM/GRU一、RNN1、为何引入RNN?2、RNN的基本结构3、各种形式的RNN及其应用4、RNN的缺陷5、如何应对RNN的缺陷?6、BPTT和BP的区别 二、LSTM1、LSTM 简介2、LSTM如何缓解梯度消失与梯度爆炸? 三、GRU四、参考文献 RNN/LSTM/GRU …...

音频录制一般在什么情况下会选择保存为PCM?什么情况会选择保存为WAV?
在音频开发中,选择保存为 PCM 或 WAV 格式取决于具体的应用场景和需求。以下是两种格式的特点以及适用场景的分析: PCM 格式 特点: 原始音频数据: PCM 是未压缩的原始音频数据,没有任何文件头或元数据。数据直接以二进…...

C#常用744单词
1.visual 可见的 2.studio 工作室 3.dot 点 4.net 网 5.harp 尖端的,锋利的。 6.amework 骨架,构架,框架 7.beta 测试版,试用版 8.XML(全称:eXtensible Markup Language)…...

如何理解算法的正确性?
循环不变式(Loop Invariant) 是算法设计和程序验证中的一个核心概念,用于证明循环的正确性。它是在循环的每次迭代开始和结束时均保持为真的一种条件或性质,帮助开发者确保循环按预期工作,最终达到目标状态。 循环不变…...

蓝桥杯试题:排序
一、问题描述 给定 nn 个正整数 a1,a2,…,ana1,a2,…,an,你可以将它们任意排序。现要将这 nn 个数字连接成一排,即令相邻数字收尾相接,组成一个数。问,这个数最大可以是多少。 输入格式 第一行输入一个正整数 nnÿ…...

实验十一 Servlet(二)
实验十一 Servlet(二) 【实验目的】 1.了解Servlet运行原理 2.掌握Servlet实现方式 【实验内容】 改造实验10,引入数据库,创建用户表,包括用户名和密码:客户端通过login.jsp发出登录请求,请求…...

第五天 初步了解ArkTS和ArkUI
初步了解ArkTS和ArkUI,可以从以下几个方面进行概述: 一、ArkTS简介 定义与关系: ArkTS是HarmonyOS(鸿蒙系统)优选的主力应用开发语言。它基于TypeScript(TS)进行扩展,兼容TS的所有特…...

java中的锁面试题
1、多线程中 synchronized 锁升级的原理是什么? synchronized 是JVM层面的锁,是 Java 关键字,通过 monitor 对象来完成,synchronized 的实现涉及到锁的升级,具体为无锁、偏向锁、自旋锁、重量级锁 synchronized 锁升级…...