Depuis peu, mon Mac affiche des messages étranges tels que "Le mois 13 est hors limites".
Comment puis-je réparer cette erreur ? Je ne peux pas me rendre dans un centre de réparation agréé par Apple car je suis très loin d'un centre Apple.
Cette erreur est enregistrée sur iOS 11 et sur MacOS 10.13, c'est certain, et je ne vois pas qu'elle cause une fonction ou un problème spécifique sur aucune plateforme.
Je vais faire un lien vers la question principale, à savoir "MacOS enregistre-t-il trop de données ?", car il s'agit d'une opinion et d'une impression qui mérite d'être discutée. Certaines personnes se sentiraient mieux s'il n'y avait aucun message, à moins qu'une situation vraiment grave ne nécessite une action. D'autres veulent encore plus de détails pour pouvoir savoir ce qui se passe / apprendre / mesurer. Il s'agira donc d'un compromis sur la manière dont ces questions sont traitées, classées et utilisées.
Un développeur intéressant qui propose des outils est Howard Oakley, qui tient un blog à l'adresse suivante https://eclecticlight.co/
Son page des téléchargements propose deux applications intéressantes (utilisez le lien de téléchargement de gauche car les versions des produits ci-dessous sont en version bêta et peuvent ne plus être à jour dans un jour ou une semaine) :
Je peux vérifier la légitimité de ce problème. J'ai eu le même problème hier, et après un redémarrage, l'ordinateur a été rendu presque inutile à cause de cette erreur. Pour une raison quelconque, l'ordinateur ne peut pas gérer ce mois et lance des erreurs partout où il y a des bases de données ou des listes.
Pour réparer cela :
Ouvrez le moniteur d'activité et quittez de force deux processus : lsd
, UserEventAgent
Ouvrez les Préférences Système et naviguez jusqu'à "Date & Heure".
Décochez "Définir la date et l'heure automatiquement".
Dans le calendrier, sélectionnez une date antérieure à décembre 2017 et appuyez sur Enregistrer.
Si UserEventAgent
ou lsd
continuent à poser des problèmes, puis les quitter à nouveau de force après avoir fixé la date.
D'autres personnes ici ont ce problème
Pourquoi ?
Il me semble que UserEventAgent essayait d'utiliser deux fichiers plist :
System/Library/LaunchAgents/com.apple.UserEventAgent-Aqua.plist
y
System/Library/LaunchAgents/com.apple.UserEventAgent-LoginWindow.plist
Quand il a essayé d'utiliser les plists, il a eu une erreur :
Month 13 is out of bounds
Je ne suis pas sûr de ce qui s'est réellement passé au sein de UserEventAgent, mais il est évident que lorsqu'il reçoit l'erreur, il ne peut pas la traiter et provoque une utilisation élevée du CPU et de la RAM.
J'ai eu le même problème avec une utilisation extrêmement élevée du CPU et de la mémoire de UserEventAgent à partir de début décembre 2017. La console a montré l'erreur "mois hors limites" comme décrit ci-dessus.
J'ai essayé le "premier secours" de l'utilitaire de disque, les redémarrages, le mode sans échec (pour vider le cache du système), le nettoyage de la NVRAM et du SMD, mais rien n'y fait. J'ai remarqué que l'utilisation du processeur et de la mémoire n'a pas connu de pic en mode sans échec.
Comme @tgray et u/kidtexas A un moment donné, j'ai compris que si je désactivais tous mes plists launchd personnalisés, le problème ne se produisait pas.
J'ai finalement écrit le petit script ci-dessous pour m'aider à déboguer la plist qui causait le problème. Il s'est avéré être un plist qui s'exécute le premier de chaque mois :
<key>StartCalendarInterval</key>
<dict>
<key>Day</key>
<integer>1</integer>
<key>Hour</key>
<integer>03</integer>
<key>Minute</key>
<integer>00</integer>
</dict>
Beaucoup de de mes plists utilisent le StartCalendarInterval
et en utilisant le script ci-dessous, j'ai pu montrer qu'ils ne semblaient pas causer le pic de RAM et les problèmes de mémoire, donc ce n'est pas tout à fait clair pour moi pourquoi une plist spécifique cause le problème. Quoi qu'il en soit, voici comment j'ai résolu le problème.
I fortement Nous recommandons aux lecteurs de regarder le script pour essayer de comprendre ce qu'il fait au lieu de simplement copier et coller. Plus précisément, tel qu'il est écrit, cela ne fonctionnera que pour les listes de données dans le répertoire ~/Library/LaunchAgents
(pas /Library/LaunchDaemons
et d'autres), et il ne teste intentionnellement que les listes dont le nom de fichier et l'adresse IP sont identiques. <key>Label</key>
suivre le modèle spécifique : com.USERNAME.my_plist_name[.plist]
. Avant de l'exécuter, j'ai utilisé un one-liner pour bootout
toutes mes listes : for plist in com."$(whoami)".*.plist; do launchctl bootout gui/"${MYUID}"/"${plist%.plist}" || true; done
et a ensuite vérifié qu'ils n'apparaissaient plus sous le nom de launchctl list
les résultats.
#! /bin/bash
# https://apple.stackexchange.com/questions/307512/month-13-is-out-of-bounds
set -euf -o pipefail
MYUID="$(id -u)"
pushd "${HOME}"/Library/LaunchAgents
while IFS= read -r -d '' plist; do
echo "${plist}"
stats=($(ps ux | grep -v grep | grep UserEventAgent | awk '{ print $3, $5}'))
cpu="${stats[0]}"
vmem="${stats[1]}"
echo "CPU use and virtual memory size while disabled: ${stats[@]}"
launchctl bootstrap gui/"${MYUID}" "${plist}"
sleep 5
stats=($(ps ux | grep -v grep | grep UserEventAgent | awk '{ print $3, $5}'))
echo "CPU use and virtual memory size while enabled: ${stats[@]}"
echo "Change in vmem: $(( "${vmem}" - "${stats[1]}" ))"
echo
done < <(find . -iname "com.$(whoami).*.plist" -print0)
popd
Comme d'autres, j'avais une utilisation élevée du processeur et une utilisation énorme de la RAM par UserEventAgent (voir mon commentaire ci-dessus). Le changement de la date en novembre et la fermeture forcée de UserEventAgent ont réglé le problème. Tout cela a commencé le samedi après le redémarrage.
J'ai trouvé ça pour moi. J'espère que pour les autres personnes ayant des problèmes, cela fonctionnera pour vous.
Le problème était un plist LaunchAgent que j'ai dans ~/Bibliothèque/LaunchAgents. C'est un simple fichier plist qui appelle StartCalendarInterval, qui est une clé valide pour les plists de LaunchAgent. Le travail LaunchAgent appelle un shell script qui copie certains fichiers dans un emplacement de sauvegarde le premier jour du mois. Le travail n'est pas appelé du tout - je pense que c'est launchd qui vérifie les travaux chargés par rapport au calendrier qui cause le problème. Dès que j'ai déchargé cette plist et déplacé le fichier hors du répertoire, UserEventAgent fonctionnait bien (après un départ forcé). Dès que j'ai chargé la plist (launchctl load xxxx), UserEventAgent est devenu fou.
StartCalendarInterval est une clé valide pour launchd comme on peut le voir ici en Documents d'Apple .
Si vous rencontrez des difficultés, vérifiez les répertoires de LaunchAgent et recherchez la clé StartCalendarInterval (ou toute autre clé liée au calendrier). Je n'ai pas eu de problèmes avec les listes d'intervalles basés sur le temps.
Note : Cela ne corrige pas les erreurs "Mois 13 hors limites", mais seulement le comportement bizarre de UserEventAgent.
Après avoir signalé ce problème à Apple et avoir remonté la chaîne d'escalade, on m'a dit que ce problème devrait être corrigé dans MacOS 10.13.3.
Apparemment, cela est dû à une application appel de la procédure NSDate obsolète 'descriptionWithCalendarFormat'. .
Vous pouvez en savoir plus à l'adresse suivante https://forums.developer.apple.com/thread/88417 .
Dans certains cas, la modification ou la suppression de certains fichiers plist empêchera les programmes d'appeler la procédure dépréciée, mais la véritable solution est une mise à jour du système d'exploitation.
LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.