greys线上调试代码

greys线上调试代码

软件的说明文档地址:https://github.com/oldmanpushcart/greys-anatomy/wiki/greys-pdf

文件位置:

>cd /usr/greys

如何获取pid:

>ps -ef|grep java 

然后从输出中找到你需要的Java进程

如进程号为7737

启动脚本:

>/usr/greys/greys.sh 7737

 

所有命令

help 查看命令的帮助文档,每个命令和参数都有很详细的说明

sc 查看JVM已加载的类信息

sm 查看已加载的方法信息

monitor 方法执行监控

trace 渲染方法内部调用路径,并输出方法路径上的每个节点上耗时

ptrace 强化版的trace命令。通过指定渲染路径,并可记录下路径中所有方法的入参、返值;与tt命令联动。

watch 方法执行数据观测

tt 方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测

stack 输出当前方法被调用的调用路径

js 支持使用JavaScript脚本;支持CommonJS部分规范模块化(BMD规范)

version 输出当前目标Java进程所加载的Greys版本号

quit 退出greys客户端

shutdown 关闭greys服务端

reset 重置增强类,将被greys增强过的类全部还原

session 查看当前会话

jvm 查看当前JVM的信息

以下以xm-shop为例

1.sc

#(1).展示每个方法的详细信息 

>sm -d *.MqttConfiguration getConsumer

#(2).展示MqttConfiguration这个类中的所有方法,可以用通配符*

>sm -d *MqttConfiguration *

2.monitor对匹配的类.方法的调用进行监控。

>monitor -c 5 *MachineLockServiceImpl dealOpenLockFeedback

3.(可以监控该方法下所有方法的调用情况只能一级,不能查看层级)

>trace *MachineLockServiceImpl dealOpenLockFeedback

4.ptrace命令

命令为trace命令的强化版,通过指定渲染路径来完成对方法执行路径的渲染过程

命令能主动搜索tracing-path-pattern所渲染的路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。

>ptrace *MachineLockServiceImpl dealOpenLockFeedback --path=*lock*

5.watch命令

能方便的让你观察到指定方法的调用情况。能观察到的范围为:返回值、抛出异常、入参,通过编写OGNL表达式进行对应变量的查看

watch -b *Test printAddress '"params[0]="+params[0]'

>watch -b *MachineLockServiceImpl dealOpenLockFeedback '"params[0]="+params[0]'

>watch -f *MachineLockServiceImpl dealOpenLockFeedback -x 2

6.tt命令 

方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测

>tt -t *MachineLockServiceImpl dealOpenLockFeedback 

#找到上面输出的index,查看该次调用的详情

>tt -i 1001

#打印栈的情况

>jstack   *MachineLockServiceImpl dealOpenLockFeedback 

>tt -t *MachineLockServiceImpl dealOpenLockFeedback params[0].length==1

7.stack命令

很多时候我们都知道一个方法被执行,但这个方法被执行的路径非常多。或者你根本就不知道这个方法是从那里被执行了,

此时你需要的是stack命令。

>stack   *MachineLockServiceImpl dealOpenLockFeedback 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VAE是一种生成式模型,可以用于生成具有类似于训练数据的新样本。以下是一个简单的VAE代码示例: ```python import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers # 定义编码器模型 latent_dim = 2 encoder_inputs = keras.Input(shape=(28, 28, 1)) x = layers.Conv2D(32, 3, activation="relu", strides=2, padding="same")(encoder_inputs) x = layers.Conv2D(64, 3, activation="relu", strides=2, padding="same")(x) x = layers.Flatten()(x) x = layers.Dense(16, activation="relu")(x) z_mean = layers.Dense(latent_dim, name="z_mean")(x) z_log_var = layers.Dense(latent_dim, name="z_log_var")(x) encoder = keras.Model(encoder_inputs, [z_mean, z_log_var], name="encoder") # 定义采样层 class Sampling(layers.Layer): """采样层""" def call(self, inputs): z_mean, z_log_var = inputs batch = tf.shape(z_mean) dim = tf.shape(z_mean)[1] epsilon = tf.keras.backend.random_normal(shape=(batch, dim)) return z_mean + tf.exp(0.5 * z_log_var) * epsilon # 定义解码器模型 latent_inputs = keras.Input(shape=(latent_dim,)) x = layers.Dense(7 * 7 * 64, activation="relu")(latent_inputs) x = layers.Reshape((7, 7, 64))(x) x = layers.Conv2DTranspose(64, 3, activation="relu", strides=2, padding="same")(x) x = layers.Conv2DTranspose(32, 3, activation="relu", strides=2, padding="same")(x) decoder_outputs = layers.Conv2DTranspose(1, 3, activation="sigmoid", padding="same")(x) decoder = keras.Model(latent_inputs, decoder_outputs, name="decoder") # 定义VAE模型 class VAE(keras.Model): """VAE模型""" def __init__(self, encoder, decoder, **kwargs): super(VAE, self).__init__(**kwargs) self.encoder = encoder self.decoder = decoder self.total_loss_tracker = keras.metrics.Mean(name="total_loss") self.reconstruction_loss_tracker = keras.metrics.Mean(name="reconstruction_loss") self.kl_loss_tracker = keras.metrics.Mean(name="kl_loss") @property def metrics(self): return [ self.total_loss_tracker, self.reconstruction_loss_tracker, self.kl_loss_tracker, ] def train_step(self, data): with tf.GradientTape() as tape: z_mean, z_log_var = self.encoder(data) z = self.sampling([z_mean, z_log_var]) reconstruction = self.decoder(z) reconstruction_loss = tf.reduce_mean( keras.losses.binary_crossentropy(data, reconstruction) ) kl_loss = -0.5 * (1 + z_log_var - tf.square(z_mean) - tf.exp(z_log_var)) kl_loss = tf.reduce_mean(tf.reduce_sum(kl_loss, axis=1)) total_loss = reconstruction_loss + kl_loss grads = tape.gradient(total_loss, self.trainable_weights) self.optimizer.apply_gradients(zip(grads, self.trainable_weights)) self.total_loss_tracker.update_state(total_loss) self.reconstruction_loss_tracker.update_state(reconstruction_loss) self.kl_loss_tracker.update_state(kl_loss) return { "loss": self.total_loss_tracker.result(), "reconstruction_loss": self.reconstruction_loss_tracker.result(), "kl_loss": self.kl_loss_tracker.result(), } def call(self, data): z_mean, z_log_var = self.encoder(data) z = self.sampling([z_mean, z_log_var]) return self.decoder(z) def sampling(self, args): z_mean, z_log_var = args batch = tf.shape(z_mean) dim = tf.shape(z_mean) epsilon = tf.keras.backend.random_normal(shape=(batch, dim)) return z_mean + tf.exp(0.5 * z_log_var) * epsilon # 加载MNIST数据集 (x_train, _), (x_test, _) = keras.datasets.mnist.load_data() all_digits = np.concatenate([x_train, x_test], axis=0) all_digits.shape # 数据预处理 all_digits = all_digits.astype("float32") / 255.0 all_digits = np.reshape(all_digits, (-1, 28, 28, 1)) # 训练VAE模型 vae = VAE(encoder=encoder, decoder=decoder) vae.compile(optimizer=keras.optimizers.Adam()) vae.fit(all_digits, epochs=30, batch_size=128) # 使用VAE模型生成新的手写数字样本 n = 30 # 生成30个数字样本 digit_size = 28 figure = np.zeros((digit_size * n, digit_size * n)) # 在潜在空间中均匀分布采样n x n个点 grid_x = np.linspace(-4, 4, n) grid_y = np.linspace(-4, 4, n)[::-1] for i, yi in enumerate(grid_y): for j, xi in enumerate(grid_x): z_sample = np.array([[xi, yi]]) x_decoded = vae.decoder(z_sample) digit = x_decoded.numpy().reshape(digit_size, digit_size) figure[ i * digit_size : (i + 1) * digit_size, j * digit_size : (j + 1) * digit_size, ] = digit # 显示生成的手写数字样本 plt.figure(figsize=(10, 10)) start_range = digit_size // 2 end_range = n * digit_size + start_range + 1 pixel_range = np.arange(start_range, end_range, digit_size) sample_range_x = np.round(grid_x, 1) sample_range_y = np.round(grid_y, 1) plt.xticks(pixel_range, sample_range_x) plt.yticks(pixel_range, sample_range_y) plt.xlabel("z") plt.ylabel("z") plt.imshow(figure, cmap="Greys_r") plt.show() ``` 此示例演示了如何使用Keras和TensorFlow实现一个简单的VAE模型,它可以学习MNIST数据集中的手写数字,并生成类似于这些数字的新样本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值