Преглед изворни кода

储能日志,安科瑞改密码,容器扩jvm参数

learshaw пре 1 недеља
родитељ
комит
a974310d26

+ 2 - 2
ems/docker/cloud/ems-dev-adapter/Dockerfile

@@ -22,8 +22,8 @@ ENV NACOS_SERVER=0.0.0.0:8848
 ENV NACOS_NAMESPACE=public
 ENV SPRING_PROFILES_ACTIVE=prod
 
-# 启动服务
-ENTRYPOINT java -Dnacos.server.grpc.port.offset=$GRPC_PORT_OFFSET -jar ems-dev-adapter.jar \
+# 启动服务(堆内存 1~1.5G,容器限制 3072M;开启OOM堆转储便于排查)
+ENTRYPOINT java -Xms1024m -Xmx1536m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/ems/ems-dev-adapter/heapdump.hprof -Dnacos.server.grpc.port.offset=$GRPC_PORT_OFFSET -jar ems-dev-adapter.jar \
   --spring.profiles.active=$SPRING_PROFILES_ACTIVE \
   --spring.cloud.nacos.discovery.server-addr=$NACOS_SERVER \
   --spring.cloud.nacos.discovery.namespace=$NACOS_NAMESPACE \

+ 4 - 0
ems/docker/cloud/ems-dev-adapter/docker-compose.yml

@@ -7,6 +7,10 @@ services:
     restart: always
     networks:
       - ems_default
+    deploy:
+      resources:
+        limits:
+          memory: 3072M
     environment:
       - NACOS_SERVER=192.168.20.210:8848
       - NACOS_NAMESPACE=2c519718-1e09-4de4-9af5-d07f837372d6

+ 44 - 0
ems/ems-cloud/ems-dev-adapter/src/main/java/com/ruoyi/ems/gcc/handle/GccHandler.java

@@ -299,6 +299,13 @@ public class GccHandler extends BaseDevHandler implements MqttMessageHandler {
      */
     private final Map<String, Map<String, String>> pendingAttrs = new ConcurrentHashMap<>();
 
+    /**
+     * 已落库属性值内存快照(key = modelCode:objCode:attrKey):
+     * MQTT上报频率高但多数值无变化,落库前先与快照比对,仅变化时写库,减少MySQL压力;
+     * 每设备首次落库前从DB预取一次填充快照,避免重启后全量重写;快照标记key = seeded:modelCode:objCode
+     */
+    private final Map<String, String> flushedAttrCache = new ConcurrentHashMap<>();
+
     @Autowired
     private IElecStoreService elecStoreService;
 
@@ -799,10 +806,21 @@ public class GccHandler extends BaseDevHandler implements MqttMessageHandler {
                 String modelCode = keys[0];
                 String objCode = keys[1];
 
+                // 首次落库前预取DB现有值填充内存快照,之后仅变更时写库
+                ensureAttrCacheSeeded(modelCode, objCode);
+
                 for (Map.Entry<String, String> attr : entry.getValue().entrySet()) {
+                    String cacheKey = modelCode + ":" + objCode + ":" + attr.getKey();
+
+                    // 值无变化不落库,减少无效REPLACE
+                    if (StringUtils.equals(flushedAttrCache.get(cacheKey), attr.getValue())) {
+                        continue;
+                    }
+
                     try {
                         objAttrValueService.mergeObjAttrValue(
                             new EmsObjAttrValue(objCode, modelCode, attr.getKey(), attr.getValue()));
+                        flushedAttrCache.put(cacheKey, attr.getValue());
                     }
                     catch (Exception e) {
                         log.error("储能属性值落库失败 obj[{}] key[{}]", objCode, attr.getKey(), e);
@@ -815,6 +833,32 @@ public class GccHandler extends BaseDevHandler implements MqttMessageHandler {
     }
 
     /**
+     * 确保设备属性内存快照已填充(每设备仅预取一次)
+     *
+     * @param modelCode 设备模型
+     * @param objCode   对象代码
+     */
+    private void ensureAttrCacheSeeded(String modelCode, String objCode) {
+        String seedKey = "seeded:" + modelCode + ":" + objCode;
+        if (flushedAttrCache.containsKey(seedKey)) {
+            return;
+        }
+
+        try {
+            List<EmsObjAttrValue> existList = objAttrValueService.selectByObjCode(modelCode, objCode);
+            for (EmsObjAttrValue value : existList) {
+                flushedAttrCache.putIfAbsent(modelCode + ":" + objCode + ":" + value.getAttrKey(),
+                    value.getAttrValue());
+            }
+        }
+        catch (Exception e) {
+            log.warn("预取设备属性快照失败, 本轮全量写库, obj[{}]", objCode, e);
+        }
+
+        flushedAttrCache.put(seedKey, "1");
+    }
+
+    /**
      * 刷新当日充放电增量:电表当日正向/反向电能、一体机当日充电量/放电量,
      * 计算口径 = 当前累计值 - 当日零点基线快照,结果写入物模型属性值(下一周期落库)
      */

+ 1 - 1
ems/ems-cloud/ems-dev-adapter/src/main/resources/application-local.yml

@@ -155,7 +155,7 @@ adapter:
     url: http://127.0.0.1:8090
     auth:
       loginName: admin
-      password: Ctdq@1208
+      password: Ctdq@12345678
     subids: 10100002,10100003
   # 广场照明控制
   square-lighting-ctl:

+ 1 - 1
ems/ems-cloud/ems-dev-adapter/src/main/resources/application-prod-ct.yml

@@ -152,7 +152,7 @@ adapter:
     url: http://172.61.55.66:8090
     auth:
       loginName: admin
-      password: Ctdq@1208
+      password: Ctdq@12345678
     subids: 10100002,10100003
   # 广场照明控制
   square-lighting-ctl:

+ 14 - 0
ems/ems-cloud/ems-dev-adapter/src/main/resources/logback.xml

@@ -102,6 +102,15 @@
         </rollingPolicy>
         <encoder><pattern>${log.pattern}</pattern></encoder>
     </appender>
+    <!-- 储能(城市动力) -->
+    <appender name="gcc_appender" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}/gcc.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${log.path}/gcc.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <encoder><pattern>${log.pattern}</pattern></encoder>
+    </appender>
 
     <!-- ===================== 包绑定 + 控制台输出全开 ===================== -->
     <logger name="com.ruoyi.ems.acrel" level="info" additivity="false">
@@ -144,6 +153,11 @@
         <appender-ref ref="console" />
         <appender-ref ref="file_error" />
     </logger>
+    <logger name="com.ruoyi.ems.gcc" level="info" additivity="false">
+        <appender-ref ref="gcc_appender" />
+        <appender-ref ref="console" />
+        <appender-ref ref="file_error" />
+    </logger>
 
     <!-- 基础包日志 -->
     <logger name="com.ruoyi" level="info" />