Android11 深休后系統定時喚醒導致網絡請求服務器過載

硬件平臺:QCS6125

軟件平臺:Android11

問題:每天的7:00和22:00 服務器會突然收到批量設備的網絡請求,導致服務器過載。

? ? 通過系統的logcat日志發現了系統在休眠后,每天會有22:00、7:00的喚醒,從而導致這個時間段積累的workmanager定時任務同時批量調度,導致服務器緊張。

06-22 21:57:58.378     0     0 I         : Restarting tasks ... done. 
06-22 22:00:00.313  2108  2108 D Digital_clock: updateClock()!
06-22 22:00:00.314  1402  2696 I BatteryStatsService: In wakeup_callback: resumed from suspend
06-22 21:57:58.394     0     0 I         : Resume caused by misconfigured IRQ 20 glink-native
06-22 22:00:00.314     0     0 I PM      : PM: suspend exit 2025-06-22 14:00:00.314131022 UTC
06-22 22:00:00.314     0     0 I PM      : suspend exit
06-22 22:00:00.316  1402  1402 D ConditionProviders.SCP: onReceive ScheduleConditionProvider.EVALUATE
06-22 22:00:00.317  1402  1402 D ConditionProviders.SCP: evaluateSubscriptionLocked cal=ScheduleCalendar[mDays={1, 2, 3, 4, 5, 6, 7}, mSchedule=ScheduleInfo{days=[1, 2, 3, 4, 5, 6, 7], startHour=22, startMinute=0, endHour=7, endMinute=0, exitAtAlarm=true, nextAlarm=Thu Jan 01 08:00:00 GMT+08:00 1970 (0)}], now=Sun Jun 22 22:00:00 GMT+08:00 2025 (1750600800316), nextUserAlarmTime=Thu Jan 01 08:00:00 GMT+08:00 1970 (0)
06-22 22:00:00.317  1402  1402 D ConditionProviders.SCP: notifyCondition condition://android/schedule?days=1.2.3.4.5.6.7&start=22.0&end=7.0&exitAtAlarm=true STATE_TRUE reason=meetsSchedule
06-22 22:00:00.317  1402  1402 D ConditionProviders.SCP: Scheduling evaluate for Mon Jun 23 07:00:00 GMT+08:00 2025 (1750633200000), in +8h59m59s684ms, now=Sun Jun 22 22:00:00 GMT+08:00 2025 (1750600800316)
06-22 22:00:00.326  2108  2108 D Digital_clock: updateClock()!
06-22 22:00:00.332  2108  2108 D Digital_clock: updateClock()!
06-22 22:00:00.332   839  2062 D AudioPolicyManagerCustom: setForceUse() usage 3, config 8, mPhoneState 0
06-22 22:00:00.415     0     0 I PM      : PM: suspend entry 2025-06-22 14:00:00.415238470 UTC
06-22 22:00:00.415     0     0 I PM      : suspend entry (deep)
06-22 22:00:00.415     0     0 I PM      : Syncing filesystems ... done.
06-22 22:00:00.440     0     0 I         : Freezing user space processes ...
06-22 22:00:00.450     0     0 I PM      : Pending Wakeup Sources: qcom_rx_wakelock
06-22 22:00:00.450     0     0 E         : Freezing of tasks aborted after 0.010 seconds
06-22 22:00:00.450     0     0 I         : OOM killer enabled.
06-22 22:00:00.458  1402  2696 I BatteryStatsService: In wakeup_callback: suspend aborted
06-22 22:00:00.450     0     0 I         : Restarting tasks ... done.
06-22 22:00:00.457     0     0 I         : Resume caused by misconfigured IRQ 20 glink-native
06-22 22:00:00.457     0     0 I PM      : PM: suspend exit 2025-06-22 14:00:00.457686751 UTC

而這個喚醒規則是按照framework層的一個勿擾模式的默認配置文件default_zen_mode_config.xml來的:

<?xml version="1.0" encoding="utf-8"?>
<!--
/*
** Copyright 2014, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
**     http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
--><!-- Default configuration for zen mode.  See android.service.notification.ZenModeConfig. -->
<zen version="9"><allow alarms="true" media="true" system="false" calls="true" callsFrom="2" messages="false"reminders="false" events="false" repeatCallers="true" convos="false"convosFrom="3"/><automatic ruleId="EVENTS_DEFAULT_RULE" enabled="false" snoozing="false" name="Event" zen="1"component="android/com.android.server.notification.EventConditionProvider"conditionId="condition://android/event?userId=-10000&amp;calendar=&amp;reply=1"/><automatic ruleId="EVERY_NIGHT_DEFAULT_RULE" enabled="false" snoozing="false" name="Sleeping"zen="1" component="android/com.android.server.notification.ScheduleConditionProvider"conditionId="condition://android/schedule?days=1.2.3.4.5.6.7&amp;start=22.0&amp;end=7.0&amp;exitAtAlarm=true"/><!-- all visual effects that exist as of P --><disallow visualEffects="511" /><!-- whether there are notification channels that can bypass dnd --><state areChannelsBypassingDnd="false" />
</zen>                                                        

這個規則配置的目的可能就是在相應的時間點,觸發系統是否進入勿擾模式的狀態評估。

? ? 針對我們這個問題,想到了大概兩個方案吧,一個是直接禁用這個規則的加載;一個是把規則里邊nextAlarm的時間打散,比如隨機在22和7點上下浮動20min,即把喚醒的時間點從精準的7:00和22:00調整為散列在21:40~22:20以及6:40~7:20的范圍。

? ? 由于不太確定規則禁用對系統的直接影響,所以采用了第二種方式。

具體改動如下:

diff --git a/services/core/java/com/android/server/notification/ScheduleConditionProvider.java b/services/core/java/com/android/server/notification/ScheduleConditionProvider.java
index 35170332a07..df17b091e74 100644
--- a/services/core/java/com/android/server/notification/ScheduleConditionProvider.java
+++ b/services/core/java/com/android/server/notification/ScheduleConditionProvider.java
@@ -45,6 +45,7 @@ import java.io.PrintWriter;import java.util.ArrayList;import java.util.Calendar;import java.util.List;
+import java.util.Random;/*** Built-in zen condition provider for daily scheduled time-based conditions.
@@ -70,6 +71,7 @@ public class ScheduleConditionProvider extends SystemConditionProviderService {private AlarmManager mAlarmManager;private boolean mConnected;private boolean mRegistered;
+    private boolean mShakeValue;private long mNextAlarmTime;public ScheduleConditionProvider() {
@@ -181,6 +183,27 @@ public class ScheduleConditionProvider extends SystemConditionProviderService {updateAlarm(now, mNextAlarmTime);}+    private long getRandomTimeDelta() {
+        Random random = new Random();
+        // create a random num between 0~30
+        long randomNumber = (long) random.nextInt(21);
+
+        // set mShakeValue
+        mShakeValue = (randomNumber & 1) == 0;
+
+        if (mShakeValue)
+            return (randomNumber * 60 * 1000);
+
+        return -(randomNumber * 60 * 1000);
+    }
+
+    private boolean isNeedRandomTime(String cal) {
+        if (cal.contains("startHour=22"))
+            return true;
+
+               return false;
+    }
+@VisibleForTesting@GuardedBy("mSubscriptions")Condition evaluateSubscriptionLocked(Uri conditionId, ScheduleCalendar cal,
@@ -211,6 +234,13 @@ public class ScheduleConditionProvider extends SystemConditionProviderService {if (nextChangeTime > 0 && nextChangeTime > now) {if (mNextAlarmTime == 0 || nextChangeTime < mNextAlarmTime) {mNextAlarmTime = nextChangeTime;
+                if (DEBUG) Slog.d(TAG, String.format("mNextAlarmTime:  %s",
+                        ts(mNextAlarmTime)));
+                if (isNeedRandomTime(String.format("%s", cal))) {
+                    mNextAlarmTime = nextChangeTime + getRandomTimeDelta();
+                    if (DEBUG) Slog.d(TAG, String.format("Add random value mNextAlarmTime:  %s",
+                            ts(mNextAlarmTime)));
+                }}}return condition;

修改完成,編譯驗證日志:

06-25 16:50:39.122  1404  1404 D ConditionProviders.SCP: evaluateSubscriptionLocked cal=ScheduleCalendar[mDays={1, 2, 3, 4, 5, 6, 7}, mSchedule=ScheduleInfo{days=[1, 2, 3, 4, 5, 6, 7], startHour=22, startMinute=0, endHour=7, endMinute=0, exitAtAlarm=true, nextAlarm=Thu Jan 01 08:00:00 GMT+08:00 1970 (0)}], now=Wed Jun 25 16:50:39 GMT+08:00 2025 (1750841439104), nextUserAlarmTime=Thu Jan 01 08:00:00 GMT+08:00 1970 (0)
06-25 16:50:39.122  1404  1404 D ConditionProviders.SCP: notifyCondition condition://android/schedule?days=1.2.3.4.5.6.7&start=22.0&end=7.0&exitAtAlarm=true STATE_FALSE reason=!meetsSchedule
06-25 16:50:39.123  1404  1404 D ConditionProviders.SCP: mNextAlarmTime:  Wed Jun 25 22:00:00 GMT+08:00 2025 (1750860000000)
06-25 16:50:39.124  1404  1404 D ConditionProviders.SCP: Add random value mNextAlarmTime:  Wed Jun 25 22:18:00 GMT+08:00 2025 (1750861080000)
06-25 16:50:39.125  1404  1404 D ConditionProviders.SCP: Scheduling evaluate for Wed Jun 25 22:18:00 GMT+08:00 2025 (1750861080000), in +5h27m20s896ms, now=Wed Jun 25 16:50:39 GMT+08:00 2025 (1750841439104)

可以看到,默認設置的是22:00,但是通過修改的代碼邏輯,下次alram的時間變成了22:18:00,即隨機數生成的是18,目標達成。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/911942.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/911942.shtml
英文地址,請注明出處:http://en.pswp.cn/news/911942.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

部署網站需求全滿足:Websoft9 多應用托管一站式方案解析

在數字化浪潮中&#xff0c;搭建專業網站已成為企業觸達客戶的核心通道。然而&#xff0c;從服務器選型到軟件環境配置&#xff0c;傳統建站模式往往讓技術門檻成為中小企業的 “攔路虎”。Websoft9 多應用托管平臺通過深度優化的鏡像技術&#xff0c;重新定義了 WordPress 建站…

Spring Boot 啟動優化實踐

本文系統性分析并優化了一個Spring Boot項目啟動耗時高達 280 秒的問題。通過識別瓶頸、優化分庫分表加載邏輯、異步初始化耗時任務等手段&#xff0c;最終將啟動耗時縮短至 159 秒&#xff0c;提升近 50%。文章涵蓋啟動流程分析、性能熱點識別、異步初始化設計等關鍵技術細節&…

Jenkins執行Jenkinsfile報錯

遇到部署的步驟時傳輸文件到其他服務器&#xff0c;文件傳上去了&#xff0c;但是命令都沒有執行成功。 寫法&#xff1a; 報錯了&#xff1a;ERROR:Exception when publishing,exception message [Exec exit status not zero.Status [1]] 原因是因為&#xff1a;cd 引用了環…

Modbus TCP轉Profibus DP網接APM810/MCE安科瑞多功能電表通訊案例

Modbus TCP轉Profibus DP網接APM810/MCE安科瑞多功能電表通訊案例 在工業自動化和電力監控領域&#xff0c;Modbus TCP與Profibus DP是兩種常見的通訊協議&#xff0c;它們各自有著廣泛的應用場景和優勢。而當需要將這兩者進行連接&#xff0c;以實現不同設備間的數據傳輸和信…

MySQL常見問題概述

一、MySQL常見問題概述 MySQL是最常用的關系型數據庫&#xff0c;但使用中常會遇到 性能慢、數據丟失、主從不同步、鎖沖突 等問題。這些問題可能導致系統響應變慢、用戶操作失敗&#xff0c;甚至數據損壞。 核心解決思路&#xff1a;先定位問題類型&#xff08;是查詢慢&…

zlmediakit windows 編譯webrtc

1、環境準備 系統環境&#xff1a;Windows 10 專業版 序號名稱版本用途1Microsoft Visual Studio20222openssl3.0.53cmake3.24.04libsrtp2.4.0webrtc播放需要 2、安裝libsrtp https://github.com/cisco/libsrtp/releases/tag/v2.4.2 2.1、新建構建目錄 在libsrtp-2.4.2根目錄…

Redis Pipelining 是性能加速的秘密武器?

在高性能的現代應用中&#xff0c;Redis 因其閃電般的速度而備受青睞。而 Pipelining&#xff08;管道技術&#xff09; 則是 Redis 性能優化的核心功能之一。許多開發者都聽說過它能提升性能&#xff0c;但它究竟是如何做到的&#xff1f;是否會帶來負面影響&#xff1f;今天我…

系統性能優化-6 TCP 三次握手

系統性能優化-6 TCP 三次握手 TCP 三次握手 客戶端優化 客戶端發送 SYN 給服務器 此時客戶端連接狀態&#xff1a;SYN_SENT如果服務器繁忙或中間網絡不暢&#xff0c;客戶端會重發 SYN&#xff0c;重試的次數由 tcp_syn_retries 參數控制&#xff0c;默認是 6 次&#xff0c;第…

WPF 實現自定義彈窗輸入功能

1.前端實現 <Grid><Grid.RowDefinitions><RowDefinition Height"60" /><RowDefinition Height"*" /></Grid.RowDefinitions><BorderGrid.Row"0"BorderBrush"WhiteSmoke"BorderThickness"0.1&qu…

WPF中Converter基礎用法

IValueConverter 1.創建一個類集成接口IValueConverter,并實現 2在xaml中引入 舉例 性別用int來表示&#xff0c;1為男&#xff0c;2為女 核心代碼 創建GenderConverter繼承IValueConverter public class GenderConverter : IValueConverter {//model->view轉換public…

Postgresql的json充當字典應用

一般我們會將一些系統參數放到參數表中&#xff0c;有些參數的值是json結構&#xff0c;那么如何在查詢時引用這些參數&#xff1f;&#xff1f; 比如我在業務表的的xxx_type,或xxx_status記錄的是key,又想在查詢的時候顯示其描述。 先定義字典 如下圖如何應用 Postgresql對j…

Dify全面升級:打造極致智能應用開發體驗,攜手奇墨科技共拓AI新生態

智能應用開發平臺Dify以六大核心功能升級與深度性能優化&#xff0c;重新定義AI開發效率與體驗。本次更新不僅響應了開發者社區的迫切需求&#xff0c;更通過與云計算領域先鋒奇墨科技的戰略合作&#xff0c;為企業提供了從開發到部署的全鏈路智能化解決方案。 .技術領先&#…

關于uniapp開發阻止事件冒泡問題

背景。uniapp開發微信小程序。在使用兩個組件拼接嵌套使用后&#xff0c;發現問題&#xff0c;會誤操作跳轉到更多頁面。下圖中兩個事件若不使用stop修飾符&#xff0c;會相互影響。若點擊uni-list-item會串行觸發uni-card的handledoctorlist方法。 產生上面問題原因是組件之間…

箭頭函數和普通函數的區別?

箭頭函數&#xff08;Arrow Functions&#xff09;和普通函數&#xff08;傳統函數&#xff09;在 JavaScript 中有顯著的區別&#xff0c;主要體現在語法、this 的綁定、構造函數行為、參數處理等方面。以下是詳細對比&#xff1a; 1. 語法差異 普通函數&#xff1a; functio…

Linux系統日志與守護進程開發實戰指南

Linux系統日志與守護進程開發實戰指南 系統日志與守護進程 ├── 系統日志syslog │ ├── 日志路徑: /var/log/syslog │ └── 核心API │ ├── openlog │ ├── syslog │ └── closelog └── 守護進程daemon└── 創建步驟├── um…

Vue.js 過濾器詳解

Vue.js 過濾器詳解 下面我將詳細講解Vue.js中過濾器的語法和使用注意事項&#xff0c;并提供一個完整的演示頁面。 過濾器基本概念 在Vue.js中&#xff0c;過濾器&#xff08;Filters&#xff09; 是用于文本格式化的功能&#xff0c;可以在雙花括號插值和v-bind表達式中使用…

【iOS】iOS崩潰總結

【iOS】iOS崩潰總結 一、前言 之前寫了一篇博文《【Flutter】程序報錯導致的灰屏總結》&#xff0c;瀏覽量、收藏率和點贊量還挺高&#xff0c;還被收錄了&#xff0c;就想著總結一下iOS崩潰&#xff0c;這個也是在iOS面試中經常被問到的。 在 iOS 開發過程中&#xff0c;導致…

機器學習:特征向量與數據維數概念

特征向量與數據維數概念 一、特征向量與維數的定義 特征向量與特征類別 在機器學習和數據處理中&#xff0c;每個樣本通常由多個特征&#xff08;Feature&#xff09; 描述。例如&#xff0c;一張圖片的特征可能包括顏色、形狀、紋理等&#xff1b;一個客戶的特征可能包括年齡…

開發基于Jeston Orin Nx 開發版 16G的實現

一、基本配置 1.配置參數 密碼&#xff1a;yahboom Ubuntu 20.04版本、python3.8、CUDA11.4、cuDNN8.6、TensorRT8.5、Jetpack5.1.1、Opencv4.5.4版本 終端輸入命令&#xff1a;sudo jtop 其中Jetpack是英偉達提供的專門供它自己的嵌入式計算機平臺使用的人工智能包。 終…

【技術分享】XR技術體系淺析:VR、AR與MR的區別、聯系與應用實踐

XR技術體系淺析&#xff1a;VR、AR與MR的區別、聯系與應用實踐 作者&#xff1a;EQ 雪梨蛋花湯 本文是技術分享文檔&#xff0c;淺析VR&#xff08;虛擬現實&#xff09;、AR&#xff08;增強現實&#xff09;、MR&#xff08;混合現實&#xff09;的定義、特性、技術演進路線&…