- 博客(38)
- 收藏
- 关注
原创 【Java】readUnsignedShort()与readShort()
主要区别在于他们处理读取的两个字节的方式以及返回值类型和范围。readShort() 计算过程如下。假设我们从流中读取两个字节,由于short是有符号类型,计算过程如下,返回值为。
2025-03-25 21:53:50
180
原创 【网络】手机PUSH消息发送自建IM通道实现方案
状态判断:通过自建IM长连接实时监测用户在线状态(ONLINE/OFFLINE),离线时触发自有通道消息缓存并启动重试机制。隐私保护:遵循最小化数据采集原则,传输过程使用端到端加密(TLS 1.3),用户身份信息脱敏处理,符合《隐私保护协议》要求。动态容灾:采用多级熔断机制,根据通道健康度(如响应延迟、成功率)动态切换传输路径,确保服务可用性>99.9%。监控体系:集成消息发送成功率、端到端延迟、用户点击率等指标,支持按业务标签多维分析,快速定位异常节点。
2025-03-25 21:20:57
185
原创 【Netty】心跳
对于服务端来说,不需要实现断线重连,因为服务端是等待客户端连接的一方;服务端需要关注服务的持续运行、真确处理客户端断开事件、等待客户端重连;重连的职责由客户端来完成。不完全一样的,ConnectionHandler 管理连接集合;HeartbeatHandler 负责连接活性检测,两者可以互相配合,保证连接的可靠性。
2025-03-21 17:04:29
219
原创 【java】 Too many open files
最终,在排查完项目中所有socket相关操作后发现,发现在使用苹果push消息推送的时,在出现推送异常后,虽然有进行错误异常捕获,但是没有执行客户端的close方法,导致大量的文件句柄被占用。犯罪现场已经被破坏,无法查询到在重启之前服务使用了多少文件描述符, 因为已经排除了并发量大导致出现问题的可能,在重启推送服务后,其他服务也可以正常运行,所以怀疑是文件描述符泄漏导致的问题。因为项目整体并发量很大,初步怀疑是否因为并发量很高导致出现的问题,但查询日志后发现,初次出现。文件操作时,没有正确的关闭文件流。
2025-03-18 20:55:23
505
原创 【Netty】消息分发处理方式
检索平台,使用长链接的方式与外部系统进行交互;因平台使用的的自定义二进制交互协议,因此需要针对每个接口请求与响应都要进行编解码, 因此需要一种针对不同消息的分发处理。
2025-03-18 20:51:51
155
原创 【Netty】SimpleChannelInboundHandler如何根据数据类型处理消息
【代码】【Netty】SimpleChannelInboundHandler如何根据数据类型处理消息。
2025-03-18 17:26:37
169
原创 【Netty】ChannelInboundHandlerAdapter与SimpleChannelInboundHandler的区别
1.如果你需要将消息传递给下一个处理器,应该使用。2.如果你是消息的最终处理者,推荐使用。3 如果你需要处理特定类型的消息,使用。
2025-03-18 16:43:27
123
原创 【优化】系统性能优化步骤
Micrometer + Prometheus + Grafana: 用于实时监控和可视化。JMeter: 用于进行负载测试并确定基本的吞吐量数值。JProfiler: 用于深入分析代码中的热点区域。火焰图:用于识别CPU密集型方法。
2025-03-13 16:23:15
163
原创 【Docker】windows 11 安装docker
Windows 11:WSL 2 安装和管理指南,3 种方法任你选docker汉化包地址安装过程
2025-02-15 20:03:49
187
原创 【Elasticsearch】邮件数据存储优化分析
在邮件系统中,为了高效管理和检索个人邮件索引,我们采用了基于邮件哈希值取模计算的方式来确定每封个人邮件的具体存储位置。这种方法帮助我们将邮件数据均匀分布到多个索引中,避免了所有邮件都集中存储在一个索引里,从而提高了系统的扩展性和性能。一封邮件可能有多个接收者,这意味着相同的邮件内容可能会被多个用户检索。在这种情况下,为了减少对相同邮件数据的重复存储,同时确保不同接收者能够对其邮件进行全文检索,我们需要优化Elasticsearch(ES)中的数据索引设置。
2025-02-14 14:53:58
745
原创 【JVM】记一次生产内存溢出问题
推送了大量push信息后,厂商会回调我们的接口,推送回执信息(批量),在使用mongo处理大量回执信息时,mongo数据库CPU使用率100%,回执服务内存溢出,导致服务瘫痪。经过堆栈数据分析,可以看出PowerOfTwoBufferPool对象,在内存经过FGC后,依然没有得到释放,长期占用内存;同时分析了回执处理代码,中间也存在很多问题,比如一次查询很多无用数据,使用大量串行化处理。
2024-04-29 11:47:44
564
1
原创 【java】GC指标
元空间(Metaspace)的容量 (KB)压缩类空间垃圾回收消耗的时间 (秒)第一个幸存区已使用空间 (KB)第二个幸存区已使用空间 (KB)Eden 区已使用空间 (KB)年轻代垃圾回收消耗的时间 (秒)老年代垃圾回收消耗的时间 (秒)压缩类空间已使用空间 (KB)总的垃圾回收消耗的时间 (秒)第一个幸存区的容量 (KB)第二个幸存区的容量 (KB)Eden 区的容量 (KB)老年代已使用空间 (KB)元空间已使用空间 (KB)压缩类空间的容量 (KB)压缩类空间垃圾回收次数。
2024-04-25 16:00:43
297
1
原创 【spring】代码中如何获取ApplicationContext
【代码】【spring】代码中如何获取ApplicationContext。
2024-01-12 17:49:56
448
1
原创 【spring boot】HttpServlet 方法的init 在spring boot 项目中 为什么没有执行
注解的 HttpServlet 类时,它会将该类注册为 Spring Bean。但是,Spring 容器不会自动调用 HttpServlet 类的 init 方法。HttpServlet 方法的 init 方法在 Spring Boot 项目中没有执行,是因为 Spring Boot 使用了。如果要手动调用 HttpServlet 类的 init 方法,可以使用。方法中,可以调用 HttpServlet 类的 init 方法。注解的类,并将它们注册为 Spring Bean。
2023-12-22 11:59:02
736
原创 【kafka】重置消费的offset
此命令将重置所有分区的消费者偏移量。此命令将将分区数增加到 3。此命令将将分区的副本数设置为 1、2 和 3。
2023-12-06 15:20:00
1537
2
原创 【linux】如何检索压缩包中内容
如果你想要在多个zip文件中进行检索,你可以使用通配符来指定文件名的模式。来匹配当前目录下的所有zip文件。
2023-11-22 17:54:46
2709
原创 【kafka】基础指令
from-beginning 参数表示从最早的可用偏移量开始消费, --max-messages 1 参数表示只消费一条消息。
2023-10-24 13:52:36
347
原创 【内存泄漏】Java程序内存泄漏,导致GC频繁,CPU飙升不下
这是因为内存泄漏会占用一些内存,而这些内存没有被正确释放,使得垃圾回收器无法回收这些内存,从而导致了内存的浪费。因此,尽管内存使用率很低,但由于内存泄漏导致了内存占用的浪费,垃圾回收仍然可能频繁发生。如果存在内存泄漏,应该定位并修复它们,以避免内存占用浪费和频繁的垃圾回收。Java虚拟机会定期扫描堆内存中的对象,当发现某个对象没有任何引用时,就会将其标记为垃圾,然后由垃圾回收器进行回收。2.当程序创建了大量的临时对象,且这些对象生命周期很短,一旦它们的作用域结束就会成为垃圾,会由Minor GC回收。
2023-05-06 15:50:55
1841
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人